sql-server - 在 Powershell 中使用 Invoke-SqlCmd 使用 $( 插入字符串时出错

标签 sql-server powershell

设置:

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

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

关于sql-server - 在 Powershell 中使用 Invoke-SqlCmd 使用 $( 插入字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580003/

相关文章:

sql - 查找存储过程中未引用的所有表

sql-server - 有没有一种方法可以在不使用游标的情况下循环遍历 SQL 中的表变量?

.net - 在 64 位环境中使用 32 位 COM 对象

powershell - 在Powershell中创建通用列表时出现“Could not construct Closed Type using the provided arguments”错误

powershell - Powershell脚本来过滤Windows事件日志

sql - 如何从存储在MS SQL server表中的以下数据中获取结果集中的以下顺序?

SQL 队列将在 2 周内获得工作负载 [SQL Server]

powershell - 在 Powershell 类中使用反射

powershell - 使用get-childitem时,Powershell Remove-Item项目为Null

sql-server - 用前导零填充字符串,使其在 SQL Server 2008 中为 3 个字符长