我使用遊標來刪除一組表。表的數量大約是400.當計數達到105時,執行掛起。請找到以下腳本:如何在使用sqlserver中的遊標刪除大量表時清除死鎖?
DECLARE @TblName NVARCHAR(MAX);
DECLARE TBL_Cur CURSOR
FOR (select name from sysobjects
where name like 'xxx');
OPEN TBL_Cur;
FETCH NEXT FROM TBL_Cur INTO @TblName
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF LEN(@TblName) >0
BEGIN
DECLARE @strsql nvarchar(max)
if ('Create_ts' IN (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where table_name = @TblName))
BEGIN
SET @strsql = 'Select count(*) from' + @TblName + ' where DATEDIFF(HOUR,create_ts,getdate())>1'
Begin try
BEGIN TRAN
EXEC sp_executesql @strsql
COMMIT TRAN
End Try
Begin Catch
End catch
END
END
FETCH NEXT FROM TBL_Cur INTO @TblName
END
CLOSE TBL_Cur
DEALLOCATE TBL_Cur
在此先感謝您的幫助。
呃,什麼?............... –
我不知道你的意思,你的標題提到了我看不到的UPDATE,而你的問題機構提到了DELETE,我也沒有看到... –
@Mitch wheat我不清楚你在問什麼? – charu