在 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()
当我使用 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()