大規模なデータベースでのレポートクエリを高速化するために、あるテーブルのレコード数を別のテーブルの列として保存するトリガーを作成しています。
これが私がこれまでに得たものです。削除では問題なく動作しますが、挿入でも動作する必要があります。別のトリガーを使用する必要がありますか? また、カーソルの使用は必要ですか、それともより効率的な方法はありますか?
ありがとう!
ALTER TRIGGER [dbo].[updateSourceTotals]
ON [dbo].imports
AFTER INSERT, DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sourceId int;
DECLARE deleteCursor CURSOR FOR SELECT DISTINCT sourceId FROM deleted
OPEN deleteCursor
FETCH NEXT FROM deleteCursor INTO @sourceId
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE sources
SET totalImports = (
SELECT COUNT(*)
FROM imports
WHERE sourceId = @sourceId
)
WHERE id = @sourceId
FETCH NEXT FROM deleteCursor INTO @sourceId
END
CLOSE deleteCursor
DEALLOCATE deleteCursor
END
GO