次のように、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とROLLBACKorCOMMITでラップするだけですが、Powershellでこれを実行できますか?コマンドレットがありStart-Transactionますが、トランザクションで使用されるコマンドからのサポートが必要であり、そうではあり$db.Create()ません。
SMOオブジェクトにトランザクションを実行する方法はありますか?もちろん、事前にすべてのデータベースをチェックすることもできますが、スクリプト全体が非常に複雑であり、ロジックを作成に近づけることができれば、より理解しやすいと思います。