Powershell を使用して、SQL Server からビューとストアド プロシージャの定義を読み取ろうとしています。おそらく作成として定義を取得し、同じ名前のデータベース上の新しいサーバーでこれを実行します。
これを始めるのに役立つアイデアはありますか? 私はPowershellを初めて使用します。
Powershell を使用して、SQL Server からビューとストアド プロシージャの定義を読み取ろうとしています。おそらく作成として定義を取得し、同じ名前のデータベース上の新しいサーバーでこれを実行します。
これを始めるのに役立つアイデアはありますか? 私はPowershellを初めて使用します。
ビューを作成するために、新しいサーバーにすべての参照テーブルが既にあると仮定します。
Import-Module SQLPS -DisableNameChecking
$serverName = 'your_source_InstanceName'
$dbname = 'your_source_DbName'
$destServerName = 'your_destination_InstanceName'
$destdbname = 'your_destination_DbName'
$destSrv = New-object "Microsoft.SqlServer.Management.SMO.Server" $destServerName
$destDb = $destSrv.Databases[$destdbname]
$srv = New-object "Microsoft.SqlServer.Management.SMO.Server" $serverName
$db = $srv.Databases[$dbname]
$scr = New-Object "Microsoft.SqlServer.Management.Smo.Scripter"
$scr.Server = $srv
$options = New-Object "Microsoft.SqlServer.Management.SMO.ScriptingOptions"
$options.AllowSystemObjects = $false
$options.SchemaQualify = $true
$options.ClusteredIndexes = $true
$options.Default = $true
$options.DriAll = $true
$options.Indexes = $true
$options.NonClusteredIndexes = $true
#Set options for SMO.Scripter
$scr.Options = $options
#StoredProcedures
$StoredProcedures = $db.StoredProcedures | where {$_.IsSystemObject -eq $false}
Foreach ($StoredProcedure in $StoredProcedures)
{
if ($StoredProcedures -ne $null)
{
Try{
$destDb.ExecuteWithResults($scr.Script($StoredProcedure))
}
Catch{
$err = $Error[0].Exception
Write-host "Error caught: " $err.Message;
While ($err.InnerException){
$err = $err.InnerException;
Write-Host "Inner exception:" $err.InnerException.Message;
};
return;
}
}
}
#Views
$views = $db.Views | Where {$_.IsSystemObject -eq $false}
Foreach ($view in $views)
{
if ($views -ne $null)
{
Try{
$destDb.ExecuteWithResults($scr.Script($View))
}
Catch{
$err = $Error[0].Exception
Write-host "Error caught: " $err.Message;
While ($err.InnerException){
$err = $err.InnerException;
Write-Host "Inner exception:" $err.InnerException.Message;
};
return;
}
}
}
これで始められます。何をしなければならないかはわかりませんが、これにより、PowerShell でストアド プロシージャが実行されます。
この情報については、以下の記事を使用しました。 http://www.databasejournal.com/features/mssql/article.php/3683181/Microsoft-Windows-PowerShell-and-SQL-Server-2005-SMO-150-Part-II.htm
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=HOME\SQLEXPRESS;Database=master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "sp_helpdb"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
PowerShell コミュニティ拡張機能を使用しているかどうかはわかりませんが、次のようにすることもできます (2008 以降のみ):
1.) プラグインを追加する
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
2.) Invoke-SQLcmd を使用する
$query = "EXEC nameofsproc"
$db = "nameofdatabase"
$instance = "(local)"
$user = 'sa'
invoke-sqlcmd -query $query -database $db -serverinstance $instance -Variable
以下は、Powershell でのビューの作成について詳しく説明している Web サイトです。
http://bi-bigdata.com/2013/03/10/powershell-tutorial-for-creating-view/