我正在运行一个 PS 脚本,该脚本加载 SqlServer 模块,然后调用 Invoke-SqlCmd。 Invoke-SqlCmd 正在使用存储过程调用脚本。
我最初使用 21.1.18256 开发脚本。一切正常,但 v21.1.18256/Invoke-SqlCmd 不适用于 -TrustServerCertificate。我发现此选项在此版本中不可用,因此决定升级以能够使用此参数。
然后我升级到v22.1.1。我测试并发现 Invoke-SqlCmd 在此版本中运行相同的存储过程时反应不同。运行完全相同的脚本,该过程不起作用。我以交互方式运行它,它看到它调用该过程并表明它正在工作。我检查了数据库,发现没有插入任何记录。
我在 SQL 脚本中有一个 Try/Catch、Begin/End Tran。我删除了 Begin/End Tran,存储过程的反应有所不同。现在它按预期进行插入,但只是部分插入。在我预计有 100 条记录的表中,我只得到 25 条记录。
我尝试过v22.0.59,结果与v22.1.1相同。当我切换回 v21.1.18256 时,一切正常,并且记录计数符合预期。我目前正在切换到本机 sqlcmd.exe,它正在按预期工作。
不确定是否有人以前见过这个,或者我做错了什么。
我使用的是Windows2019/SqlServer2019/PS5.1
参见:PowerShell:带有 Get-Credential 的 invoke-sqlcmd 不起作用
并且:Invoke-Sqlcmd 在一个桌面上工作,在另一个桌面上失败
这些可能可以解决您遇到的问题:
-Credential
在此处安装正确的 SQL Server 模块:https://learn.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver16