INSERT dynamischen Satz von Zeilen in die Tabelle nach dem Erzeugen eines neuen Primärschlüssels

Ich schreibe eine gespeicherte Prozedur, die im Wesentlichen "eine Spielliste mit einem anderen Benutzer" teilt. Es nimmt eine Tabellenzeile, erstellt einen neuen Primärschlüssel und INSERTS eine neue Zeile mit dem neuen Primärschlüssel in die Tabelle. Dann werden data in einer verknüpften zweiten Tabelle mit dem neuen Primärschlüssel dupliziert.

Auf hohem Niveau möchte ich eine neue Playlist mit den gleichen Tracks erstellen ( playlist_msg ), sondern generiere eine neue playlist_id für einen neuen User und verknüpfe die gleichen Tracks mit der neuen playlist_id .

Meine Tabellen sind wie folgt aufgebaut:

playlist_tbl

 playlist_id varchar(30) - Primary key user_id int description varchar(300) created_dt datetime 

playlist_msg_tbl

 playlist_id varchar(30) - Primary key sequence int - Primary key - basically the track number for the playlist msg_id varchar(30) 

So ist die Idee, dass, wenn die Playlist geteilt wird, innerhalb des gespeicherten Prozedurcodes eine neue user_id generiert und eine neue user_id in user_id zugewiesen wird. Dann wird in msg_id eine doppelte msg_id die mit der alten msg_id verknüpft ist, in INSERTED mit der neuen INSERTED .

Mein Problem ist das, weil die Anzahl der Zeilen in playlist_msg_tbl anders sein wird, muss ich herausfinden, wie man irgendeine Art einer loop schreibt, die ein INSERT für jede Zeile in playlist_msg_tbl dynamisch macht.

Gespeicherte Prozedur:

 CREATE PROCEDURE [dbo].[Share] @description varchar(300), @recipientId int AS BEGIN SET NOCOUNT ON; DECLARE @newPlaylistId varchar(30) exec dbo.GenerateString 1, 1, 1, null, 30, @newPlaylistId OUT INSERT INTO playlist (playlist_id, user_id, description, created_dt) VALUES (@newPlaylistId, @recipientId, @description, GETDATE()) --This is where my theoretical loop would go, not sure how to handle the code for that END GO 

   

Ich bin ein bisschen verwirrt, warum genau Sie brauchen eine loop …

Würde kein INSERT nur funktionieren?

 INSERT INTO playlist_msg_tbl (playlist_id, sequence, msg_id) SELECT @newPlayListId, x.sequence, x.msg_id FROM playlist_msg_tbl WHERE playlist_id = @oldPlaylistId