--sql語句-游標等使用 declare @sql nvarchar(500) declare @TableName nvarchar(100) declare @i INT declare @j nvarchar(20) declare @cstucount INT --上方設置變量 set @i = 1--初始值 declare mCursor cursor --設置游標 for --for循環 select name from sysobjects where xtype='U' --獲取所有的表名 open mCursor --游標的使用開始,打開游標 fetch NEXT from mCursor into @TableName --for循環中獲取下一條記錄 while @@fetch_status = 0 --@@fetch_status全局變量,0表示語句獲取成功,-1,-2均是失敗 begin --開始 set @sql='select @a=count(*) from ' + QUOTENAME(@TableName) --設置sql語句到變量@sql exec sp_executesql @sql,N'@a int output',@cstucount OUTPUT -- 執行語句,且將得到的值使用變量賦值@cstucount即為@a拿到的值 if @cstucount>0 --如果記錄數>0表示有數據,則不進行重設置標識列 BEGIN print '第'+Convert(nvarchar(10),@i)+'個,'+@TableName+',大於0,值為='+CONVERT(nvarchar(10),@cstucount) END ELSE BEGIN --set @sql='DBCC CHECKIDENT('+QUOTENAME(@TableName)+', RESEED, 1)' --這句查了一段時間,語句中拿的不太一樣,不過這里直接給他放QUOTENAME節可以了,QUOTENAME能夠將對象編程有效的字符串 --exec(@sql) --執行語句 print '第'+Convert(nvarchar(10),@i)+'個,'+@TableName+',小於等於0,值為='+CONVERT(nvarchar(10),@cstucount) END set @i=@i+1 --設置i=i+1 fetch NEXT from mCursor into @TableName --拿下一個數據 end close mCursor --關閉游標 deallocate mCursor --刪除游標 go --顯示結果
