[英]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字符串( "..."
) -见下文。
@'<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."
也可以看看:
`
双引号字符串内支持-prefixed转义序列,如`t
代表一个制表符。 请注意, Windows PowerShell支持的序列少于 PowerShell [Core] 6+。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.