从 PowerShell 提交 SQL 事务

问题描述 投票:0回答:1

我想在这里运行这段代码:

Write-Host "Running script"

$SQLServer4 = "ServerA" 
$Database4 = 'master'


Invoke-Sqlcmd -ServerInstance $SQLServer4 -Database $Database4 -InputFile "C:\Users\Documents\Scripts\SaveSite.txt"

脚本中有commit语句,被注释掉了,需要手动运行,只要输出好看就行。当我在 SSMS 中执行此操作时,这很好,但我不确定如何从 PowerShell 运行提交语句。

我尝试运行以下命令:

Invoke-Sqlcmd -Query "commit" -ServerInstance "ServerA"

我收到这个错误:

Invoke-Sqlcmd : The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. 
Msg 3902, Level 16, State 1, Procedure , Line 1.

我该怎么做?

sql-server powershell tsql transactions commit
1个回答
0
投票

会话结束时隐式提交事务。

如果您需要保持事务打开,您将无法使用

Invoke-SqlCommand
相反,您可能需要手动创建和使用 ADO.Net 对象,如
SqlConnection
SqlCommand
SqlTransaction 
.

这是一个坏主意,顺便说一句。 SQL Server 将像锁一样持有资源,直到事务完成,这是在服务器上创建死锁的好方法。事务不是为了确认长期运行的操作。相反,它们旨在防止复杂操作中的错误/未完成,这些操作仍应在合理的时间内完成。如果您有复杂的操作且需要审查的前期信心较低,则应将它们推送到一个(简短)事务中的暂存区,然后在确认后在另一个(简短)事务中推送。

© www.soinside.com 2019 - 2024. All rights reserved.