SQL Server 2012: создание сценариев из командной строки

19

Я использую SQL Server 2012.

В SQL Server Management Studio есть возможность щелкнуть правой кнопкой мыши базу данных, затем выбрать Задачи и Создать сценарии.

Есть ли способ как-нибудь автоматизировать это через командную строку?

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

Инструменты вроде ScriptDBи sqlpubwiz.exeвсе нацелены на SQL Server 2005. Как насчет SQL Server 2012?

Harald
источник

Ответы:

20

Лучше всего использовать Powershell - если вы собираетесь использовать его часто. Вы можете обратиться к Automated Script-генерации с 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-scripter - это многоплатформенный интерфейс командной строки, эквивалентный широко используемому опыту Generate Scripts Wizard в SSMS.

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

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

Некоторые примеры использования:

Генерация сценариев DDL для всех объектов базы данных (по умолчанию) в базе данных Adventureworks и вывод на стандартный вывод

$ 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
BradC
источник
9

Я написал утилиту командной строки с открытым исходным кодом под названием SchemaZen, которая делает это. Это намного быстрее, чем создание сценариев из студии управления, и его вывод более удобен для контроля версий. Он поддерживает сценарии как схемы, так и данных.

Для генерации скриптов выполните:

Сценарий schemazen.exe - сервер localhost - база данных db --scriptDir c: \ somedir

Затем для воссоздания базы данных из скриптов выполните:

schemazen.exe создать --server localhost --database db --scriptDir c: \ somedir
Сет Рено
источник
0

Вы можете использовать версии командной строки xSQL Schema Compare и xSQL Data Compare . С версиями командной строки вы можете планировать периодические сравнения данных и схем с пустой базой данных, и в этом всегда есть сценарии для создания точной копии последней версии вашей базы данных с нуля.

Раскрытие информации: я связан с xSQL.

Энди Жупани
источник
0

Просто обновление: в текущих версиях модулей PowerShell для 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:

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
}

Надеюсь это поможет.

Виктор Лопес
источник