我在一個SQL Server 2008 R2實例使用PowerShell創建一組數據庫,就像這樣:創建PowerShell的數據庫事務
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中,我只是將其包裝在BEGIN TRAN
和ROLLBACK
或COMMIT
中,但我可以在Powershell中執行此操作嗎?有一個cmdlet Start-Transaction
,但它需要來自事務中使用的命令的支持,而$db.Create()
則不需要。
有沒有辦法在SMO
對象上做交易?我當然可以預先檢查所有的數據庫,但是整個腳本非常複雜,如果我可以使邏輯更接近創建,我覺得它會更容易理解。
這裏的想法是在Powershell內部進行的,如果可能的話,因爲在同一個任務中還有很多其他的事情要做。 – carlpett
您可以在powershell中使用try/catch塊,並在catch塊中添加一些邏輯來「撤消」 - 刪除/刪除任何創建的數據庫。 –