Array und Loop in einem SQL server Trigger, wie?

Ich schaffe einen Trigger auf einer Tabelle in einer SQL server database.

Aber was ich nicht tun kann, ist das: Ich habe variables @pageid und @templateid , und ich muss alle Template-Spalten- @templateid aus einer Tabelle lesen – im Grunde bekomme sie eine list von ihnen (sie hängen von der Template-ID ab und können variieren Nummer), also brauche ich irgendeine Art, ein Array zu machen oder etwas und gehe es durch und füge es zu einem Tisch hinzu.

Damit…

  1. Wie lese ich alle templates-IDs (image unten: von der 1. Tabelle (vorhandene templatesfelder) – where availabletemplateid is @templateid ) in ein Array?

  2. Wie gehe ich durch dieses Array und füge es eins nach dem anderen zu einer anderen Tabelle hinzu (image unten: 2. Tabelle – (public page to field mapping) mit publicpageid = @pageid und fieldid ist eins nach dem anderen aus dem vorherigen Schritt und Feldinhalt ist "-")

Bildbeschreibung hier eingeben

So weit ich habe

 ALTER TRIGGER CreatePageFields ON dbo.PublicPages FOR INSERT AS BEGIN TRANSACTION /* variables */ DECLARE @pageid bigint, @templateid bigint /* insert template fields for this page */ SELECT @pageid = id, @templateid = templateid FROM inserted /* TODO 1 get all template field id's */ /* TODO 2 insert each templatefieldid / page combination */ /* execute */ COMMIT TRANSACTION GO 

Danke vielmals

Ich glaube nicht, dass Sie ein Array (Tabellenvariable) oder eine beliebige Looping (Cursor) benötigen. Etwas wie das wird viel, viel schneller (Raten an deinem Tisch und Feldnamen):

 INSERT INTO publicpagetofieldmapping (PublicPageID, FieldID, FieldContent) SELECT t1.ID, t2.ID, '-' FROM INSERTED t1 JOIN AvailableTemplateFields t2 ON t1.TemplateID = t2.availabletemplateid 

Verwenden Sie einen Cursor:

 DECLARE cur CURSOR FOR SELECT ID FROM AvailableTemplateFields WHERE AvailableTemplateID = @templateid; FETCH NEXT FROM cur INTO @current_template_id WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO PublicPageFieldMapping ( PublicPageID, FieldID, FieldContent ) VALUES ( @pageid, @current_template_id, '-' ); FETCH NEXT FROM cur INTO @current_template_id; END CLOSE cur DEALLOCATE cur 

EDIT: Obwohl dies der path ist, es zu tun "mit einem Array" (nicht, dass ein Cursor ein Array ist, aber die Logik ist die gleiche wie weit das Lesen von DB-datasätzen in sie und dann durch sie hindurch), sollten Sie auch in der Lage sein um dies mit einer geraden Abfrage zu erreichen, was schneller wäre.