在 PowerShell 中使用 Invoke-Sqlcmd 时,在 SQL 查询中保留注释文本?

Keep commented text in SQL query when using Invoke-Sqlcmd in PowerShell?

例如,我有以下 SQL 我想在 PowerShell 中 运行 的查询:

select 
item1, --this is a comment
item2
from myTable

如果我尝试 运行 使用 Invoke-Sqlcmd 在 PowerShell 中执行此查询,我会收到语法错误,因为它无法将评论解析为评论:

Invoke-Sqlcmd -Query 'select item1, --this is a comment item2 from myTable'

有没有办法保留我的查询评论?

您是否尝试过使用 PowerShell here-strings?例如:

Invoke-SqlCmd -Query @"
select 
item1, --this is a comment
item2
from myTable
"@

您的第一个示例是多行查询,如果您删除注释文本,则它等同于:

select 
item1, 
item2
from myTable

但是您的第二个示例全部在一行中,相当于:

select item1, 

无效 sql,因此出现错误。

您可以使用 "here strings":

使其成为有效的多行查询
Invoke-SqlCmd -Query @"
select 
item1, --this is a comment
item2
from myTable
"@

或自己在第二个版本中插入换行符 (`r`n):

Invoke-Sqlcmd -Query 'select`r`n item1, --this is a comment`r`n item2`r`n from myTable'

Here-strings 显然比转义换行符更漂亮,但您可以选择...

如果你不想使用, you can use block comment syntax:

Invoke-Sqlcmd -Query 'select item1, /*this is a comment*/ item2 from myTable'

您不需要使用 or a block comment syntax
只需引用查询就足以保留新行:

Invoke-SqlCmd -Query '
select 
item1, --this is a comment
item2
from myTable
'

注意:为此建议use single quoted (here)strings,因为它们几乎是双引号(此处)字符串的两倍。