0

抱歉问了个小问题,但是...

尝试使用调用命令在 PowerShell 中执行 SQL 命令时遇到问题

当我尝试将字符串添加到 SQL 命令中时,问题就开始了:

$sqlNAVresutl = Invoke-SQLCMD -Query 'SELECT *
FROM [dbo].[DBO name]
WHERE [dbo].[Job Queue Entry].Status = 2 AND [dbo].[$Job Queue Entry].[Object ID to Run] = 52063060 AND [dbo].[$Job Queue Entry].[User ID] = 'Domain\Account'
GO
' 
 -ServerInstance "Server name" -Database "dbo name"

当我添加Domain\Account到代码时,问题就开始了。它在 SQL 中有效,但在 PowerShell 中无效,因为整个查询都在单引号 ( ' ') 中。

我该怎么做才能读取单引号内的字符串?

4

2 回答 2

0

At-Query你可以使用双引号作为 at-ServerInstance-Database

于 2019-12-10T11:35:51.900 回答
0

要在 PowerShell 中的字符串文字中嵌入'(单引号),您有 3 个选项:


单引号字符串( '...') 中,将它们加倍

# ' doubled
'Honey, I''m home.'

单引号字符串以其他方式逐字解释,因此没有其他字符。需要逃避。

相反,这意味着不会在此类字符串中扩展(插值)变量引用或表达式;如果需要 - 例如,如果$Job您的查询字符串是指$Job在 PowerShell 中定义的变量的值- 您必须使用引号字符串 ( "...") - 见下文。


在单引号的here-strings ( @'<newline>...<newline>'@) 中,您根本不需要转义'

单引号字符串的这种总是多行的变体不需要任何字符的转义。

# No escaping needed (ignore the broken syntax highlighting)
@'
Honey, I'm home.
'@

注意:关闭'@必须在行的最开始- 甚至不允许前面的空格。


双引号字符串 ( "...")中,您根本不需要转义'

但是,由于此类可扩展字符串(插值字符串)被设计解释$变量引用(例如,$var)或子表达式(例如$(1+2))的开头,因此您必须转义文字 $字符。作为`$

  • `(反引号)通常用作 PowerShell 中的转义字符(请参见下面的链接),因此您可以类似地使用`"来转义嵌入的"字符。

  • 需要转义文字$字符。同样`$适用于可扩展字符串( ) 的here-string变体,嵌入不需要转义。
    @"<newline>...<newline>"@"

# No escaping of ', but literal $ must be escaped as `$
"Honey, I'm home; I hate my `$Job."

也可以看看:

  • about_Quoting_Rules,关于字符串文字的官方帮助主题。
    • about_Special_Characters,它解释了双引号字符串中支持的`带前缀的转义序列,例如表示制表符。请注意,Windows PowerShell支持的序列少于 PowerShell [Core] 6+。`t
  • 这个答案,详细解释了可扩展字符串(字符串插值)。
于 2019-12-10T14:23:04.830 回答