我的T-SQL脚本存在问题,该脚本作为SQL Server代理作业运行。 使用以下代码。
SET NOCOUNT ON
DECLARE @Table varchar(512)
DECLARE @Index varchar(512)
declare @Query nvarchar(512)
DECLARE cur CURSOR FOR SELECT SO.name, SI.name FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')inner join sys.objects SO on SO.object_id=sys.dm_db_index_physical_stats.object_id inner join sys.indexes SI on SI.index_id=sys.dm_db_index_physical_stats.index_id and SI.object_id = sys.dm_db_index_physical_stats.object_id WHERE avg_fragmentation_in_percent > 10.0 AND sys.dm_db_index_physical_stats.index_id > 0 AND SO.name not like '%ReminderRun%'
OPEN cur
FETCH NEXT FROM cur INTO @Table, @Index
WHILE @@FETCH_STATUS = 0
BEGIN
set @Query = 'ALTER INDEX [' + @Index + '] ON [' + @Table + '] REBUILD'
print @Query
EXEC sp_executesql @Query
FETCH NEXT FROM cur INTO @Table, @Index
End
Close cur
DEALLOCATE cur
SET NOCOUNT OFF
我自己没有编写代码,因为我不是一个程序员,但每次偶尔工作都会挂起,我必须手动停止它,因为它会锁定数据库。
有谁能告诉我这个脚本到底做了什么,也许有人可以在脚本中看到导致它挂起的东西?
亲切的问候,
萨沙