Sql server 使用Powershell更新SQL记录

Sql server 使用Powershell更新SQL记录,sql-server,powershell,Sql Server,Powershell,又是我,关于PowerShell和SQL如何协同工作,我还没有完全掌握,这不是我的主要经验领域,所以请原谅我可能犯的简单错误 我正在尝试更新一行中的一个字段。我已经在这里搜索了,并且能够构建我所需要的大部分内容,但是得到一条错误消息 使用“0”参数调用“ExecuteOnQuery”时出现异常:“f7附近的语法不正确。” 第61行字符:5 +$rowsAffected=$command2.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

又是我,关于PowerShell和SQL如何协同工作,我还没有完全掌握,这不是我的主要经验领域,所以请原谅我可能犯的简单错误

我正在尝试更新一行中的一个字段。我已经在这里搜索了,并且能够构建我所需要的大部分内容,但是得到一条错误消息

使用“0”参数调用“ExecuteOnQuery”时出现异常:“f7附近的语法不正确。” 第61行字符:5 +$rowsAffected=$command2.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],MethodInvocationException +FullyQualifiedErrorId:SqlException“

这是我在本节中使用的代码片段,它嵌入在foreach循环中,该循环遍历数据集的行并发送电子邮件。本节应将位类型字段“mailed”更改为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()

艾伯格林的建议非常有效。更改$MySql2=“UPDATE dbo.scans SET Mailed='True',其中SessionID='“+$BT1+””的文本字符串修复了该错误,并根据需要更新该字段

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

write-host $MySql2

此外,在处理sql语法错误时,直接登录到sql server并通过sql命令行shell提交字符串也很有帮助。从命令行成功提交字符串后,请检查powershell字符串的外观是否完全相同。

尝试显示sql字符串以确保其外观正确。可能是$BT1变量为空

write-host $MySql2

此外,在处理sql语法错误时,直接登录到sql server并通过sql命令行shell提交字符串也很有帮助。从命令行成功提交字符串后,请检查powershell字符串是否完全相同。

您可以使查询字符串设置更基本。在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'"

您可以使查询字符串设置更基本。在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'"

我想您需要在SessionID周围加上引号。我不知道这是事实,因此评论没有答案。请尝试:$MySql2=“UPDATE dbo.scans SET Mailed='True'其中SessionID=”+$BT1+“““老实说,我发现使用powershell生成
.sql
文件更容易、更好,然后通过执行
C:>mysql-uuser-ppassword-hhost-Ddatabase
在指定的数据库上执行该文件。我发现直接接口很笨重这很酷,但我不确定OP是否使用mysql。事实上,我很确定他们没有,因为他们正在使用SQL Server对象进行查询。@EBGreen谢谢,这非常有效。:)我想你需要引用SessionID。我不知道这是事实,因此评论没有答案。请尝试:$MySql2=“UPDATE dbo.scans SET Mailed='True'其中SessionID=”+$BT1+“““老实说,我发现使用powershell生成
.sql
文件更容易、更好,然后通过执行
C:>mysql-uuser-ppassword-hhost-Ddatabase
在指定的数据库上执行该文件。我发现直接接口很笨重这很酷,但我不确定OP是否使用mysql。事实上,我很确定他们没有,因为他们正在使用SQL Server对象进行查询。@EBGreen谢谢,这非常有效。:)