这是我的桌子:
dbo.帖子
- PostId(身份,PK)
- 主题
- UniqueUri (NVARCHAR(350), NOT NULL)
当我创建“帖子”时,我插入了一个空白的UniqueUri(使用NEWID()
内置函数)。
然后我在“发布”表上有一个触发器:
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 来创建唯一的 Uri。
SPROC 有一些这样的代码:
UPDATE a
SET a.CleanedUri = NEWID(),
a.UniqueUri = NEWID()
FROM [dbo].[Posts] a
INNER JOIN @PostIds b ON a.PostId = b.Id
我注意到当我尝试只插入一个帖子时,它需要一分钟多的时间。
我只能推断这是一个递归触发调用?
基本上,当创建/更新帖子时,我需要创建唯一的 uri(很像堆栈,用于问题)。
我能想到的唯一解决方案是创建另一个名为 UniqueUri's 的表,它除了 PostId FK 和 Uri 之外什么都没有,例如 1-1,我总是尽量避免。
然后 SPROC 将更新该表。
还有其他建议/想法吗?