5

设置:

CREATE TABLE MyTest (TestCol1 nchar(5))

测试:

后续工作:

Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -OutputSqlErrors $True -Query "INSERT INTO MyTest VALUES ('`$5')"
Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -OutputSqlErrors $True -Query "INSERT INTO MyTest VALUES ('(5')"

以下失败并出现以下错误:

Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -OutputSqlErrors $True -Query "INSERT INTO MyTest VALUES ('`$(5')"
Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -OutputSqlErrors $True -Query "INSERT INTO MyTest VALUES ('`$`(5')"

错误:Invoke-Sqlcmd : At line:1 char:1 + Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -Ou ... + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo : ParserError: (:) [Invoke-Sqlcmd], ParserException + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

经过一番研究,我发现 $( 在 powershell 中提供功能因此被保留。但是我尝试转义括号但没有成功。我尝试找到替代方法。关于如何做到这一点的任何想法?如果我在 SQL 中使用 CHAR 函数服务器可以工作,但在我的代码中处理会很痛苦。谢谢。

4

5 回答 5

5

All you need to do is disable the variables lookup in the invoke-Sqlcmd by adding -DisableVariables. $() is use to pass in variable into the sql statements.

Invoke-Sqlcmd -InputFile $fileName -ServerInstance $serverInstance -DisableVariables

Source http://msdn.microsoft.com/en-us/library/cc281720.aspx

于 2014-12-02T15:59:44.077 回答
0

试试这个:

'INSERT INTO MyTest VALUES ("$(5")'

或这个:

'INSERT INTO MyTest VALUES (''$(5'')'
于 2013-03-22T21:27:43.647 回答
0

$(anyvalue) 是与 SQLCMD.EXE 一起使用的保留变量,通过 sql server CHAR(36) 更改符号 $:

Invoke-Sqlcmd -Database "databasename" -ServerInstance "hostname" -OutputSqlErrors $True -Query "INSERT INTO MyTest VALUES (CHAR(36)+'(5)')"

于 2014-03-14T19:04:57.213 回答
-1

问题似乎 $( 是 Powershell 中的保留字,因此为了完成这项工作,我使用了 CHAR 函数来存储 $ (CHAR(36))。一旦我这样做了,它就起作用了,但是对于这个项目,我放弃了使用 Invoke -SqlCmd 命令并使用标准的 ADO.NET 方法。似乎 Invoke-SqlCmd 想要解析命令,并且对于保留的组合,即使您对字符进行转义,也会继续看到保留字。

于 2013-07-01T03:26:47.010 回答
-2
"INSERT INTO MyTest VALUES ('`$5')"

输出一个字符串

INSERT INTO MyTest VALUES ('$5')

"INSERT INTO MyTest VALUES ('(5')"

输出一个字符串

INSERT INTO MyTest VALUES ('(5')

"INSERT INTO MyTest VALUES ('`$(5')"

输出一个字符串

INSERT INTO MyTest VALUES ('$(5')

"INSERT INTO MyTest VALUES ('`$`(5')"

输出一个字符串

INSERT INTO MyTest VALUES ('$(5')

你想插入什么?实际上是 '$5' 还是变量 $5 的值?此外,您的变量 $5 周围有奇怪的括号。不确定是否应该是这样,或者您不了解 powershell 变量的另一个重要部分?因为这也是字符串中的一个变量"There are $((Get-Process).Count) processes running"

于 2013-03-22T22:42:50.570 回答