使用Powershell更新SQL记录

时间:2017-11-15 19:34:11

标签: sql-server powershell

再次感谢我,我仍然对PowerShell和SQL如何协同工作进行了有限的掌握,这不是我的主要经验领域所以请原谅我犯下的简单错误。我可能做了。

我正在尝试连续更新一个字段。我在这里搜索过并且能够构建我需要的大部分内容但是收到了一条错误消息,指出

"异常调用" ExecuteNonQuery"用" 0"参数:"' f7'附近的语法不正确。" 在行:61 char:5 + $ rowsAffected = $ command2.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo:NotSpecified:(:) [],MethodInvocationException     + FullyQualifiedErrorId:SqlException"

这是我正在使用的代码片段,它是嵌入在foreach循环中的,它循环遍历数据集的行并发送电子邮件。本节应该改变位类型字段"邮寄"为true,确保每条记录只发送一封电子邮件。

$connect2 = New-Object System.Data.SqlClient.SqlConnection
$connect2.ConnectionString=$ServerConnection
$connect2.Open()
$command2 = New-Object System.Data.SqlClient.SqlCommand
$command2.Connection = $connect2
$MySql2="UPDATE dbo.scans SET Mailed = 'True' WHERE SessionID ="+$BT1
$command2.CommandText = $MySql2
$rowsAffected = $command2.ExecuteNonQuery()
Write-Output "Updating mailed marker"
$connect2.Close()

EBGreen的建议完美无缺。更改$ MySql2的文本字符串=" UPDATE dbo.scans SET Mailed =' True'在哪里SessionID ='" + $ BT1 +"'"修复了错误,并根据需要更新字段。

2 个答案:

答案 0 :(得分:0)

尝试显示您的sql字符串以确保它看起来正确。可能是你的$ BT1变量是空白的。

write-host $MySql2

另外,在处理sql语法错误时,直接登录sql server并通过sql命令行shell提交字符串会很有帮助。一旦您可以从命令行成功提交字符串,然后检查您的powershell字符串是否完全相同。

答案 1 :(得分:0)

您可以使查询字符串设置更基本。在PowerShell中,如果使用双引号引用变量,PowerShell会将该变量解析为设置值。

所以不要这样做:

$MySql2="UPDATE dbo.scans SET Mailed = 'True' WHERE SessionID ="+$BT1

甚至这个:

$MySql2="UPDATE dbo.scans SET Mailed = 'True' WHERE SessionID ='"+$BT1+"'"

你可以这样做:

$MySql2="UPDATE dbo.scans SET Mailed = 'True' WHERE SessionID ='$BT1'"

enter image description here