SQL Server 2012: generar scripts desde la línea de comandos

19

Estoy ejecutando SQL Server 2012.

SQL Server Management Studio tiene la opción de hacer clic derecho en una base de datos y luego seleccionar Tareas y Generar secuencias de comandos.

¿Hay alguna manera de automatizar eso a través de la línea de comandos de alguna manera?

Quiero crear un script que incluya el esquema y los datos de toda la base de datos.

Herramientas como ScriptDBy sqlpubwiz.exetodos parecen apuntar a SQL Server 2005. ¿Qué hay de SQL Server 2012?

Harald
fuente

Respuestas:

20

Lo mejor es usar Powershell, si lo vas a usar con frecuencia. Puede referirse a la generación automática de scripts con Powershell y SMO .

Además, las Extensiones de SQL Server PowerShell (SQLPSX) son de gran valor cuando se trabaja con Powershell. Todos los módulos tienen archivos de ayuda, por ejemplo, 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

Para herramientas de terceros, le recomiendo que revise (hay muchas herramientas de terceros, pero debajo de las que he usado y son geniales):

Kin Shah
fuente
10

Tara Raj de Microsoft anunció recientemente que el equipo de Microsoft SQL ha lanzado un conjunto de herramientas de línea de comandos para generar scripts T-SQL que parecen hacer exactamente lo que usted ha pedido:

mssql-scripter

Mssql-scripter es el equivalente de línea de comandos multiplataforma de la experiencia ampliamente utilizada del Asistente para generar scripts en SSMS.

Puede usar mssql-scripter en Linux, macOS y Windows para generar scripts T-SQL de lenguaje de definición de datos (DDL) y lenguaje de manipulación de datos (DML) para objetos de base de datos en SQL Server que se ejecutan en cualquier lugar, Azure SQL Database y Azure SQL Data Warehouse . Puede guardar el script T-SQL generado en un archivo .sql o canalizarlo a las utilidades estándar * nix (por ejemplo, sed, awk, grep) para futuras transformaciones. Puede editar el script generado o verificarlo en el control de origen y posteriormente ejecutar el script en los procesos de implementación de la base de datos SQL existente y en las canalizaciones de DevOps con herramientas de línea de comandos SQL multiplataforma estándar como sqlcmd.

Mssql-scripter se creó con Python e incorpora los principios de usabilidad de las nuevas herramientas de Azure CLI 2.0. El código fuente se puede encontrar en Github en https://github.com/Microsoft/sql-xplat-cli , ¡y agradecemos sus contribuciones y solicitudes de extracción!

Algunos ejemplos de uso:

Genere scripts DDL para todos los objetos de la base de datos (predeterminado) en la base de datos Adventureworks y envíelos a stdout

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

Genere scripts DDL para todos los objetos de la base de datos y scripts DML (instrucciones INSERT) para todas las tablas en la base de datos Adventureworks y guarde el script en un archivo

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

Escribí una utilidad de línea de comandos de código abierto llamada SchemaZen que hace esto. Es mucho más rápido que las secuencias de comandos del estudio de administración y su salida es más amigable con el control de versiones. Admite secuencias de comandos tanto de esquema como de datos.

Para generar scripts ejecute:

script de schemazen.exe --server localhost --database db --scriptDir c: \ somedir

Luego, para recrear la base de datos a partir de los scripts ejecutados:

schemazen.exe crear - servidor localhost - base de datos db --scriptDir c: \ somedir
Seth Reno
fuente
0

Puede usar las versiones de línea de comandos de xSQL Schema Compare y xSQL Data Compare . Con las versiones de línea de comandos, puede programar comparaciones periódicas de datos y esquemas con una base de datos vacía y esto siempre tiene los scripts para crear una réplica exacta de la última versión de su base de datos desde cero.

Divulgación: estoy afiliado a xSQL.

Endi Zhupani
fuente
0

Solo una actualización: en las versiones actuales de los módulos PowerShell de SQL Server (SQL Server 2014 y posteriores, creo. Probado en SSMS 17), la mayoría de estas opciones son comandos y métodos nativos.

Por ejemplo, puede usar Get-SqlDatabase y métodos como .Script () y .EnumScript (). Es realmente útil y simple, especialmente si desea un enfoque más granular (tablas específicas y otros objetos).

Por ejemplo, esto generará scripts CREATE para funciones definidas por el usuario y lo guardará en un archivo:

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

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

Si desea escribir datos y elementos como índices, claves, disparadores, etc., deberá especificar las opciones de secuencias de comandos, como esta:

$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"

Tenga en cuenta que el método Script () no admite datos de secuencias de comandos. Use EnumScript () para tablas.

Una sola mesa :

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

Todas sus vistas, guarde un archivo por cada vista, DROP y 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
}

Espero que esto ayude.

Victor Lopes
fuente