これが私のテーブルです:
dbo.Posts
- PostId(IDENTITY、PK)
- 主題
- UniqueUri(NVARCHAR(350)、NOT NULL)
「投稿」を作成するときは、(組み込み関数を使用して)空白のUniqueUriNEWID()
を挿入します。
次に、「投稿」テーブルにトリガーがあります。
CREATE TRIGGER [dbo].[OnAfterInsertUpdatePostTrigger]
ON [dbo].[Posts]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @PostIds IdentityType
INSERT INTO @PostIds
SELECT PostId
FROM INSERTED
-- Create the UniqueUri's.
EXECUTE [dbo].[UpdatePostsCleanedUriUniqueUri] @PostIds
END
これは、SPROCを呼び出してUniqueUriを作成します。
SPROCには次のようなコードがあります。
UPDATE a
SET a.CleanedUri = NEWID(),
a.UniqueUri = NEWID()
FROM [dbo].[Posts] a
INNER JOIN @PostIds b ON a.PostId = b.Id
投稿を1つだけ挿入しようとすると、1分以上かかることに気づきました。
これは再帰的なトリガー呼び出しであると推測できますか?
基本的に、投稿が作成/更新されるとき、私はユニークなURIを作成する必要があります(質問のために、スタックのように)。
私が考えることができる唯一の解決策は、UniqueUriと呼ばれる別のテーブルを作成することです。このテーブルには、PostId FKとUri、たとえば1-1しかなく、常に避けようとします。
次に、SPROCはそのテーブルを更新します。
他の提案/アイデアはありますか?