サーバー上のすべてのデータベースを更新し、それぞれのデータベースで同じロジックを実行する必要があります。問題のデータベースはすべて、CorpDB1、CorpDB2などの共通の命名体系に従います。問題のデータベース(50を超える)ごとにSQL Agent Jobを作成するのではなく、カーソルを使用してデータベースのリストを反復することを考えましたそれぞれにいくつかの動的SQLを実行します。カーソルは最後の手段でなければならないという共通の考え方に照らして、これは、文書化されていないsp_MSforeachdb stored procedureを使用して、パフォーマンスを上げるために書き直すことも、別の方法で書き直すこともできますか?最適なパフォーマンスを得るために、このカーソルを最適化または再書き込みできますか?
DECLARE @db VARCHAR(100) --current database name
DECLARE @sql VARCHAR(1000) --t-sql used for processing on each database
DECLARE db_cursor CURSOR FAST_FORWARD FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name LIKE 'CorpDB%'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'USE ' + @db +
' DELETE FROM db_table --more t-sql processing'
EXEC(@sql)
FETCH NEXT FROM db_cursor INTO @db
END
CLOSE db_cursor
DEALLOCATE db_cursor
'sp_msforeachdb'と' sp_msforeachtable'はどちらもカーソルのためのラッパーであり、パフォーマンスの違いはほとんどありません。 – JNK
Heh go figure ...私は彼らが何をしたかを見て開けたことはありませんでしたが、それは私を驚かせません。 – CheckRaise
私はあなたがそのようなカーソルを使ってSQL-Godsを動揺させるとは思わない。カーソルの正確さはサーバを停止させることはありません。それはあなたがそれをどのようにして何回行うかです。この場合、50行をループします。私はこれが私が把握できる任意の選択肢よりも優れていると思う。 –