1

Powershell を使用して、SQL Server からビューとストアド プロシージャの定義を読み取ろうとしています。おそらく作成として定義を取得し、同じ名前のデータベース上の新しいサーバーでこれを実行します。

これを始めるのに役立つアイデアはありますか? 私はPowershellを初めて使用します。

4

2 に答える 2

0

ビューを作成するために、新しいサーバーにすべての参照テーブルが既にあると仮定します。

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;
     }
    }
}
于 2013-11-07T12:01:13.243 に答える
0

これで始められます。何をしなければならないかはわかりませんが、これにより、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/

于 2013-11-06T17:11:58.510 に答える