【问题标题】:Getting exception when calling Invoke-Sqlcmd调用 Invoke-Sqlcmd 时出现异常
【发布时间】:2026-02-24 17:50:01
【问题描述】:

我在一个名为 Test.sql 的文件中有以下内容:

SELECT '$(Val1)' AS [Value 1], '$(Val2)' AS [Value 2]

我正在尝试在 pwershell 提示符下运行以下命令:

Invoke-Sqlcmd -ServerInstance '.\SQLExpress' -Variable @("Val1='Test'","Val2='Test2'") -InputFile ".\SQL\Test.sql"

我得到错误:

Invoke-Sqlcmd:'' 附近的语法不正确。在行:1 字符:1 + 调用-Sqlcmd -ServerInstance '.\SQLExpress' -变量@("Val1='Test'","Val2='Te ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

如果我将 Test.sql 中的 SQL 替换为:

SELECT @@VERSION

powershell 命令行可以正常工作,所以我认为问题出在 sql 文件本身。

如果我从提供等效参数的 dos 提示符运行 sqlcmd.exe,我的 sql 脚本可以工作。

我需要做什么才能让它工作?

【问题讨论】:

  • 您是否尝试在 .\SQLExpress 之后添加数据库名称?
  • 您的意思是使用 DATABASE 开关吗?
  • 我尝试使用开关,但没有任何区别。

标签: powershell


【解决方案1】:

当我从 SQL 文件中删除单引号时,一切正常。它似乎与命令提示符 sqlcmd.exe 的工作方式不同。

【讨论】:

  • 这里也一样!你找到任何解释了吗?
  • 谢谢谢谢谢谢!正在努力找出我做错了什么。不知道为什么它的工作方式不同,官方文档为不起作用的值指定了单引号......