在 SqlCommand.ExecuteNonQuery() 中使用 GO(提交)

Use GO (commit) in a SqlCommand.ExecuteNonQuery()

当我使用 SqlCommand.ExecuteNonQuery() 并且它的 CommandText 有一个 GO(提交)它时,我得到一个 SQLException。

我删除了它并且 SQL 起作用了,但是整个 SQL 有很多语句,我想在每个 运行 之后提交。而且我不想将它们分成多个 SqlCommand 个对象。

是否有更好的解决方案来保持提交并保持唯一的 SqlCommand 对象?

GO 不是提交,它是批分隔符。您需要将命令批处理分成块并省略 GO 以便能够使用 SqlCommand.ExecuteNonQuery().

执行它们

事务处理是独立完成的。当您在一个循环中执行多个命令时,您可以自由地 运行 将它们全部放在同一个 SqlTransaction 中,为每次迭代启动一个新事务,或者离开 SqlCommand.Transaction 属性未分配。

这是我的 PowerShell 解决方案:

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") > $null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") > $null
$cnSQL=New-Object System.Data.SqlClient.SqlConnection("Server=$($env:COMPUTERNAME)$InstanceName;Database=master;User Id=$User;Password=$Pwd")
$cnServer=New-Object Microsoft.SqlServer.Management.Common.ServerConnection($cnSQL)
$strSQL=Get-Content -Path "sqlFile.txt" | Out-String
$cnServer.ExecuteNonQuery($strSQL) > $null
$cnSQL.Close()