SQL Server 2012: Створення скриптів з командного рядка


19

Я запускаю SQL Server 2012.

Студія управління SQL Server має можливість клацнути правою кнопкою миші на базі даних, а потім вибрати Завдання та Створити сценарії.

Чи є спосіб якось автоматизувати це за допомогою командного рядка?

Я хочу створити скрипт, який включає схему та дані всієї бази даних.

Такі інструменти, як ScriptDBі sqlpubwiz.exeвсі, здається, націлені на SQL Server 2005. Що з SQL Server 2012?

Відповіді:


20

Найкраще використовувати Powershell - якщо ви збираєтеся його часто використовувати. Ви можете звернутися до автоматизованої генерації сценаріїв з Powershell та SMO .

Також велику цінність мають розширення SQL Server PowerShell (SQLPSX) при роботі з Powershell. Усі модулі мають файли довідки, наприклад Get-SqlScripter .

Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter

Для сторонніх інструментів настійно рекомендую перевірити (є багато інструментів сторонніх виробників, але нижче тих, які я використав, і вони чудові):


10

Нещодавно Тара Радж з Microsoft оголосила, що команда Microsoft SQL випустила набір інструментів командного рядка для створення сценаріїв T-SQL, які, як видається, виконують саме те, що ви просили:

mssql-скриптер

Mssql-скриптер - це еквівалент командного рядка мультиплатформної форми широко використовуваного майстра створення майстра сценаріїв у SSMS.

Ви можете використовувати mssql-скриптер у Linux, macOS та Windows для створення мови визначення даних (DDL) та мови маніпулювання даними (DML) T-SQL скриптів для об'єктів баз даних у SQL Server, що працюють у будь-якому місці, база даних Azure SQL та сховища даних Azure SQL . Ви можете зберегти згенерований сценарій T-SQL у файл .sql або передати його до стандартних утилітів * nix (наприклад, sed, awk, grep) для подальших перетворень. Ви можете редагувати згенерований скрипт або перевірити його в керуванні джерелом, а потім виконати сценарій у існуючих процесах розгортання бази даних SQL та конвеєрах DevOps за допомогою стандартних інструментів командного рядка для багатоплатформних SQL, таких як sqlcmd.

Mssql-скриптер побудований за допомогою Python і включає принципи зручності використання нових інструментів Azure CLI 2.0. Вихідний код можна знайти в Github за адресою https://github.com/Microsoft/sql-xplat-cli , і ми вітаємо ваші внески та запити про залучення!

Деякі приклади використання:

Створіть сценарії DDL для всіх об'єктів бази даних (за замовчуванням) у базі даних Adventureworks та виведіть у stdout

$ mssql-scripter -S localhost -d AdventureWorks -U sa

Створення сценаріїв DDL для всіх об'єктів бази даних та сценаріїв DML (твердження INSERT) для всіх таблиць у базі даних Adventureworks та збережіть сценарій у файл

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql

9

Я написав утиліту командного рядка з відкритим кодом на ім'я SchemaZen, яка робить це. Це набагато швидше, ніж сценарії з студії управління, і його вихід є більш зручним для контролю версій. Він підтримує сценарії як схеми, так і даних.

Щоб створити сценарії, виконайте такі дії:

schemazen.exe скрипт - сервер localhost - база даних db --scriptDir c: \ somedir

Потім відтворити базу даних із запущених сценаріїв:

schemazen.exe create --server localhost - база даних db --scriptDir c: \ somedir

0

Ви можете використовувати версії командного рядка Порівняння схем xSQL та Порівняння даних xSQL . За допомогою версій командного рядка ви можете планувати періодичні порівняння даних та схем із порожньою базою даних, і це завжди має сценарії для побудови точної репліки останньої версії вашої бази даних з нуля.

Розкриття інформації: я пов'язаний з xSQL.


0

Лише оновлення: я вважав, що в поточних версіях модулів оболонок SQL Server (SQL Server 2014 і далі. Протестовано на SSMS 17) більшість із цих параметрів є нативними командами та методами.

Наприклад, ви можете використовувати Get-SqlDatabase та такі методи, як .Script () та .EnumScript (). Це дійсно корисно і просто, особливо якщо ви хочете більш детальний підхід (конкретні таблиці та інші об'єкти).

Наприклад, це створить сценарії CREATE для визначених користувачем функцій і збереже їх у файл:

$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName

$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"

Якщо ви хочете скопіювати дані та елементи сценарію, такі як індекси, ключі, тригери тощо, вам доведеться вказати варіанти сценаріїв, наприклад:

$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions

$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True

$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"

Зауважте, що метод Script () не підтримує сценарій даних. Використовуйте EnumScript () для таблиць.

Одна таблиця :

($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)

Усі перегляди, зберегти по одному файлу на кожен перегляд, DROP та CREATE script:

ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {

    "`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"    
    $view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}

Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.