次のように、PowerShellを使用してSQLServer2008R2インスタンスにデータベースのセットを作成しています。
foreach ($database in $databases) {
# Create DB
$db = New-Object Microsoft.SqlServer.Management.SMO.Database
$db.Parent = Get-Item "SQLSERVER:\SQL\$DBServer\$Instance"
$db.Name = $database
$db.Create()
#
# Create tables, fill in data, etc
#
}
ここでは、作成するデータベースがまだ存在しないと想定しています。その場合は、中止してロールバックしたいと思います。SQLでは、これをaBEGIN TRAN
とROLLBACK
orCOMMIT
でラップするだけですが、Powershellでこれを実行できますか?コマンドレットがありStart-Transaction
ますが、トランザクションで使用されるコマンドからのサポートが必要であり、そうではあり$db.Create()
ません。
SMO
オブジェクトにトランザクションを実行する方法はありますか?もちろん、事前にすべてのデータベースをチェックすることもできますが、スクリプト全体が非常に複雑であり、ロジックを作成に近づけることができれば、より理解しやすいと思います。