【发布时间】:2022-01-16 23:46:11
【问题描述】:
在一个 PowerShell 脚本中,我读取了一个配置文件并运行了一些 SQL 查询。如果我复制代码并将其粘贴到 PowerShell ISE 中,这可以正常工作。
但如果我通过右键单击文件来运行脚本 > 使用 Powershell 运行,我会收到错误消息
Invoke-Sqlcmd : '¦' 附近的语法不正确
如果查询包含斯堪的纳维亚字符“æøå”,我只会收到此错误。
$config = Get-Content -Path <path to file>\config.json | ConvertFrom-Json
$server = $config.server
$database = $config.database
Invoke-Sqlcmd -ServerInstance $server -Database $database -QueryTimeout 0 -Query "select Næringskode from Virksomhet"
config.json
{
"server": "localhost",
"database": "MyDatabase"
}
【问题讨论】:
-
这意味着您提供给
-Query参数的参数不是有效的T-SQL。请发布查询文本。 -
很遗憾,由于敏感信息,我无法完整发布查询。但经过进一步测试,我发现问题与使用斯堪的纳维亚字符“æøå”有关。表名和列名可能由这些字母组成。所以一个简单的
select Næringskode from Virksomhet就会抛出这个异常。 -
F8调试时是否有效,执行脚本时失败?如果它在调试时工作但在运行文件时不起作用,可能是文件编码不是 Unicode。
-
优秀的指针,@SagePourpre。 Ledda,尝试将您的 PowerShell 脚本文件保存为 UTF-8 with BOM - Windows PowerShell 需要它来识别 UTF-8 文件。
-
Powershell 5 无法识别 utf8 no bom。它经常出现。