我见过一些看起来应该没问题的生产代码,80%的时间都能正常工作,但另外20%的代码似乎会在没有明显原因的情况下停止返回和迭代数据库列表:
DECLARE c_UserDatabases CURSOR FOR
SELECT Name
FROM Sys.Databases SD (NOLOCK)
ORDER BY Name
OPEN c_UserDatabases
FETCH Next FROM c_UserDatabases INTO @v_DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
-- Query that takes a few minutes to run (using dynamic SQL and EXEC, etc)
FETCH Next FROM c_UserDatabases INTO @v_DatabaseName
END
CLOSE c_UserDatabases
DEALLOCATE c_UserDatabases 这是在SQL Server2008 SP3上。我注意到一些文章提到,如果你不按名称排序,在某些版本上是不可靠的,但没有任何迹象表明这种失败情况。我认为我们可能处于一种罕见的情况,因为内部部分可能需要这么长时间才能运行?
我想知道有没有人看过这个。我计划将其重写为select到临时表中,并通过该临时表和游标。
发布于 2012-03-30 13:42:26
尽管没有文档记录,但sp_MSForeachDB提供了一种对所有DB执行查询的好方法。这种方法会有帮助吗?
EXEC sp_MSForeachDB '
SELECT * FROM [?].sys.tables
'https://stackoverflow.com/questions/9936970
复制相似问题