Вот мой стол:Создание уникальных слизов URI - это рекурсивный триггер? (SQL Server)
dbo.Posts
- сообщения дан (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 для создания уникального Ури.
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 обновит эту таблицу.
Любые другие предложения/идеи?
Очень умный! Не знал о синтаксисе 'UPDATE (fieldname)'. Попробуйте это сейчас ... – RPM1984
Это действительно работает, но в конце концов проблема была отсутствующим индексом в таблице GEOGRAPHY (и здесь отсутствующие индексы могут убить вас), так что это была проблема, а не рекурсивный триггер. Тем не менее, я буду принимать этот ответ, потому что если он * был * рекурсивным, это решило бы проблему. Благодаря! – RPM1984