【问题标题】:Invoke-Sqlcmd : Incorrect syntax near '¦'. Encoding issueInvoke-Sqlcmd:“¦”附近的语法不正确。编码问题
【发布时间】: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。它经常出现。

标签: powershell invoke-sqlcmd


【解决方案1】:

确保脚本保存在powershell 5.1可以识别的编码中(我在看Win10 20h2中的记事本)(ansi可能是最差的选择):

ansi
utf-16 le
utf-16 be
utf-8 with bom

不是(除非您使用的是 powershell 7)。

utf-8

记事本可以识别utf-8。

test.ps1:

'æøå'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2019-09-14
    • 1970-01-01
    • 2015-12-12
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多