我在一个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块中添加一些逻辑来“撤消” - 删除/删除任何创建的数据库。 –