Script SQL Server Stored Procedures com PowerShell

Publicado: 13 de abril de 2011 em PowerShell, SQL Server, Virtual PASS BR
Tags:

Olá pessoal,

Vejo que uma dúvida muito recorrente nos fóruns e entre amigos é como gerar scripts de determinados objetos no SQL Server.

Existem diversas formas de gerar script ( SSMS, T-SQL, ferramentas de terceiros, etc. ), no entanto, o PowerShell com uso do SMO faz isso de forma bem fácil e flexível.

Segue abaixo um exemplo de como gerar scripts de procedures da base AdventureWorks2008 usando PowerShell.


Clear-Host #Mesma coisa que cls do cmd

##Carrega o assembly que será usado para conectar ao SQL Server
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null

#Define nome do servidor
$srvName = "."

#Database que contém as procedures que queremos gerar os scripts
$dbName = "AdventureWorks2008"

#Arquivo de saída
$fileName = "c:\Proc.txt"

#Aqui eu crio um objeto connection que será usada na conexão à instância local
#usando as variáveis inicializadas anteriormente
##Regions são usadas apenas para organização do código
#region Connection
$con = new-object Microsoft.SqlServer.Management.Common.ServerConnection
$con.ServerInstance = $srvName
$con.LoginSecure = $true
$con.Connect()
#endregion Connection

#Me conecto ao servidor usando o Namespace SMO e o obecjto Server Connection criado anteriormente
$srv = New-Object Microsoft.SqlServer.Management.SMO.Server($con)

#Armazeno o objeto database na variável $db
$db = $srv.Databases[$dbName]

#Crio um objeto Scripting Options que será usado para definir as opções no momento da geração dos scripts
$options = New-Object ("Microsoft.SqlServer.Management.SMO.ScriptingOptions")

#Aqui nós podemos definir quais propriedades serão usadas na geração do script. Da mesma forma que
#usamos no SSMS
$options.IncludeHeaders = $false
$options.AppendToFile = $false
$options.FileName = $fileName
$options.ToFileOnly = $true
$options.IncludeIfNotExists = $false
#$options.ScriptDrops = $true

#Crio um objeto Scripter que será usado para gerar o script das procedures
$scr = New-Object ("Microsoft.SqlServer.Management.Smo.Scripter")
$scr.Server = $srv

$scr.Options = $options

#Finalizando, aqui podemos gerar o script apenas das procedures que queremos
$sp = $db.StoredProcedures | where {$_.IsSystemObject -eq $false}

$scr.Script($sp)

Abraço,

Demétrio Silva

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s