これは正常であるはずで、時間の80%で動作しますが、残りの20%は正常終了し、明白な理由がないデータベースの一覧:カーソル内のsys.databasesはデータベースをスキップします
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 Server 2008 SP3上です。私はあなたが名前で注文しなかった場合、それはいくつかのバージョンでiffyであることを言及した記事に気づいたが、この失敗条件を示すものは何もない。私は内部セクションが実行に時間がかかりすぎることがあるので、まれな状況にあるかもしれないと思いますか?
誰かがこれを見ているかどうか知りたいです。私はそれを代わりに一時テーブルとカーソルに選択するために書き直すことを計画しています。
なぜSYS.DATABASESでNOLOCKを使用していますか? –
私はコードを書かなかった。しかし、ユーザー/ログインテーブルの長時間実行されているカーソルが長い実行中にログインを妨げていて、それがセーフガードとして追加された可能性があるという問題を耳にしましたか?なぜ聞くのですか。 –