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?

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top