设置:
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')"
错误: 调用 Sqlcmd : 行:1 字符:1 + Invoke-Sqlcmd -Database "databasename"-ServerInstance "hostname"-Ou ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ParserError: (:) [Invoke-Sqlcmd], ParserException + FullQualifiedErrorId:ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
经过一番研究,我发现 $( 在 powershell 中提供功能,因此被保留。但是我尝试转义括号,但没有成功。我尝试寻找替代方案。关于如何做到这一点的任何想法?如果我使用 CHAR SQL Server 中的函数可以工作,但在我的代码中处理起来会很痛苦。谢谢。
最佳答案
您需要做的就是通过添加-DisableVariables来禁用invoke-Sqlcmd中的变量查找。
$()
用于将变量传入sql语句。
Invoke-Sqlcmd -InputFile $fileName -ServerInstance $serverInstance -DisableVariables
关于sql-server - 在 Powershell 中使用 Invoke-SqlCmd 使用 $( 插入字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580003/