繁体   English   中英

在 powershell 中调用 SQLCMD

[英]Invoke-SQLCMD in powershell

很抱歉提出一个微不足道的问题,但是......

尝试使用 invoke 命令在 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,因为整个查询都在单引号 ( ' ' ) 中。

如何读取单引号内的字符串?

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

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


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

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

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

相反,这意味着在此类字符串中没有扩展(插入)变量引用或表达式; 如果需要的-例如,如果$Job在你的查询字符串是指对一个价值$Job在PowerShell中定义的变量-你必须ü-quoted字符串( "..." -见下文。


在单引号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 ,这解释了`双引号字符串内支持-prefixed转义序列,如`t代表一个制表符。 请注意, Windows PowerShell支持的序列少于 PowerShell [Core] 6+。
  • 这个答案详细解释了可扩展字符串(字符串插值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM