ストアドプロシージャは次のとおりです。
WHILE( 1=1 )
begin
Begin Try
Begin Transaction
Update RIS.dbo.A
set registerid_with_number = CDRDB_VIEW.DBO.ONLY_GET_Number(hisexamineid)
where registerid IN (
SELECT TOP 10000 registerid
FROM RIS.dbo.A
WHERE registerid_with_number IS NULL
)
PRINT '更新一次'
--全部更新完后,退出
if @@rowcount = 0
begin
COMMIT Transaction
PRINT '最后提交一次'
BREAK
end
COMMIT Transaction
PRINT '提交一次'
waitfor delay '00:00:01' --睡眠1秒,避免锁表
End Try
Begin Catch
.........................--省略
ゼロは印刷@@ ROWCOUNTの値、および各時間0、更新、毎回初めてのプロセスを実行しますが、明らかに、どのように行数が影響を受ける可能性が万行に影響を与えているのですか?最初に私には、後にマニュアルの提出に変更し、SQL Serverが自動的に変更された行を更新するために提出されたと思ったまだ一貫性がある@@ ROWCOUNT 0
決勝:
@@ ROWCOUNTの挿入、OKを更新、削除しないだけを表し、選択は、それがまた記録、行他の文を返されました。
私はそれがされている、印刷の途中で@@ ROWCOUNTをリセットするには、「更新」のよ0
ソリューション:
次の行に続く@@ ROWCOUNTは、SQL文を検出するために、すべての文をリセットすることはできません。
更新RIS.dbo.A
セットregisterid_with_number = CDRDB_VIEW.DBO.ONLY_GET_Number(hisexamineid)
どこregisterid IN(
SELECT TOP 10000 registerid
RIS.dbo.A FROM
WHERE)registerid_with_number NULL IS
終了後の総アップデート-
= 0 @@をrowCountのIF
始める
トランザクションCOMMIT
'最後の時間をコミット' --printを
BREAK
ENDを