1

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

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

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

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

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

4

4 回答 4

3

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

Invoke-SqlCmd -Query @"
select 
item1, --this is a comment
item2
from myTable
"@
于 2019-12-02T21:44:58.880 回答
3

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

select 
item1, 
item2
from myTable

但是您的第二个示例都在一行上,相当于:

select item1, 

这不是有效的 sql,因此是错误的。

您可以使用“此处的字符串”使其成为有效的多行查询:

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 显然比转义换行符更漂亮,但请选择......

于 2019-12-02T21:48:20.623 回答
1

如果您不想使用here-strings,可以使用块注释语法

Invoke-Sqlcmd -Query 'select item1, /*this is a comment*/ item2 from myTable'
于 2019-12-02T21:48:24.133 回答
0

您不需要使用here-strings块注释语法
简单地引用查询就足以保留新行:

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

注意:建议使用单引号(此处)字符串,因为它们的速度几乎是双引号(此处)字符串的两倍。

于 2019-12-03T07:15:29.807 回答