Rus*_*960 5 sql-server powershell
建立:
CREATE TABLE MyTest (TestCol1 nchar(5))
Run Code Online (Sandbox Code Playgroud)
测试:
以下工作:
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')"
Run Code Online (Sandbox Code Playgroud)
以下错误导致以下错误:
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')"
Run Code Online (Sandbox Code Playgroud)
错误:Invoke-Sqlcmd:在行: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函数服务器有效但在我的代码中处理会很麻烦.谢谢.
小智 5
您需要做的就是通过添加-DisableVariables禁用 invoke-Sqlcmd 中的变量查找。
$()用于将变量传递到 sql 语句中。
Invoke-Sqlcmd -InputFile $fileName -ServerInstance $serverInstance -DisableVariables
Run Code Online (Sandbox Code Playgroud)
来源http://msdn.microsoft.com/en-us/library/cc281720.aspx
Rus*_*960 -1
问题似乎是 $( 是 Powershell 中的保留字,因此为了使这项工作有效,我使用 CHAR 函数来存储 $ (CHAR(36))。一旦我这样做了,它就起作用了,但对于这个项目,我放弃使用 Invoke -SqlCmd 命令并使用标准 ADO.NET 方法。似乎 Invoke-SqlCmd 想要解析该命令,并且对于保留组合,即使您转义字符,也会继续看到保留字。
| 归档时间: |
|
| 查看次数: |
5727 次 |
| 最近记录: |