SQL Server で update時にエラー532が発生するレコードがある

LOVIN 0 評価のポイント
2025-01-20T05:47:56.4566667+00:00

動作環境

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

原因等おわかりでしたらご教示ください。

不足している情報等あればご指摘ください。

SQL Server
SQL Server
Microsoft リレーショナル データベース管理分析システムのファミリで、電子商取引、基幹業務、データ ウェアハウジングなどのソリューションで使用されています。
44 件の質問
0 件のコメント コメントはありません
{count} 件の投票

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。