SQL Server
Microsoft リレーショナル データベース管理分析システムのファミリで、電子商取引、基幹業務、データ ウェアハウジングなどのソリューションで使用されています。
44 件の質問
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
動作環境
Windows Server 2019 Datacenter
Microsoft SQL Server 2019
上記環境で同じデータベース(テーブル)に対してupdateを実行する際に、エラー532が発生します。
ADOで実行していますが、レコードAは特に問題無く、レコードBに実行すると下記エラーとなります。
それぞれレコードAは上段、レコードBは下段です。(テーブル情報等は簡略化しています)
update targetTable set targetStatus=1 where div='A' and targetId=1
update targetTable set targetStatus=1 where div='B' and targetId=1
エラーメッセージは以下です。
System.Data.SqlClient.SqlException (0x80131904): 別の未処理の結果セットがまだアクティブの間に、トリガーから結果セットが返されたか、トリガーが SET NOCOUNT OFF で実行されました。
場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
場所 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
メッセージに従い、update文を以下にした所、エラーが発生しなくなりました。
set nocount on update targetTable set targetStatus=1 where div='B' and targetId=1 set nocount off
set nocount on でエラーが発生しなくなる理由がわかりません。
尚、SSMS上で直接update文を実行するとエラーは発生しません。
VB.NETでADOを使用してtargetTableに対する更新対象レコードを全件取得してループしながらupdateしているのですが、特定のDivの場合のみエラーとなります。
'コネクションはpConnでオープン済
Dim pCmd As New SqlCommand
Dim pDr As SqlDataReader
pCmd = pConn.CreateCommand
pCmd.CommandText = "select * from targetTable where div in('A','B') where targetState=0 order by div,targetId"
pDr = pCmd.ExecuteReader()
Do While pDr.Read
pDiv = pDr("div")
pId = pDr("targetId")
pCmd = New SqlCommand
pCmd = pConn.CreateCommand
pCmd.CommandText = "update targetRecord set targetState=1 where div='" & pDiv & "' and targetId=" & pId
Call pCmd.ExecuteNonQuery()
Loop
原因等おわかりでしたらご教示ください。
不足している情報等あればご指摘ください。