Creazione di unico URI Slugs - è questo un ricorsivo grilletto? (Server SQL)
-
11-10-2019 - |
Domanda
Ecco la mia tabella:
dbo.Posts
- postID (identità, PK)
- Soggetto
- UniqueUri (NVARCHAR (350), NOT NULL)
Quando creo un "Post", inserisco un vuoto UniqueUri (utilizzando il NEWID()
funzione built-in).
Ho poi hanno un trigger nella tabella "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
Il che chiama uno SPROC per creare del Unique Uri.
Lo SPROC ha qualche codice come questo:
UPDATE a
SET a.CleanedUri = NEWID(),
a.UniqueUri = NEWID()
FROM [dbo].[Posts] a
INNER JOIN @PostIds b ON a.PostId = b.Id
Ho notato che quando ho provato a inserire solo un singolo post, è stata presa in consegna di un minuto.
posso dedurre solo che questa è una chiamata di attivazione ricorsiva?
In sostanza, quando si crea un post / aggiornato, ho bisogno di creare uri unica (molto simile a pila, per le domande).
L'unica soluzione che posso pensare è creata un'altra tabella chiamata UniqueUri di, che non hanno nulla, ma il postID FK e l'Uri, per esempio un 1-1, che ho sempre cercare di evitare.
Poi lo SPROC sarebbe aggiornare quel tavolo.
Altri suggerimenti / idee?
Soluzione
Una soluzione per evitare il grilletto in modo ricorsivo a sparare è quello di eliminare le modifiche alle colonne dal grilletto:
IF ( NOT UPDATE (CleanedUri) AND NOT UPDATE (UniqueUri ) )
BEGIN
DECLARE @PostIds IdentityType
INSERT INTO @PostIds
SELECT PostId
FROM INSERTED
-- Create the UniqueUri's.
EXECUTE [dbo].[UpdatePostsCleanedUriUniqueUri] @PostIds
END;