Вот моя таблица:
dbo.Posts
- PostId (IDENTITY, PK)
- Тема
- UniqueUri (NVARCHAR (350), NOT NULL)
Когда я создаю «публикацию», я вставляю пробел UniqueUri (используя встроенную функцию NEWID()
).
У меня тогда есть триггер в таблице «Post»:
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, которая будет иметьничего, кроме PostId FK и Uri, например, 1-1, которого я всегда стараюсь избегать.
Тогда SPROC обновит эту таблицу.
Любые другие предложения / идеи?