J'ai deux tables - une est appelée #final et a beaucoup de données client (composite de toutes les informations). colonnes douzaine - first_name, middle_name, last_name, address, attendees
etc. J'ai aussi une deuxième tableMS SQL Loop dans une boucle
create table #diff_temp
(
customer_no int,
num_reception int,
num_guests int,
diff int
)
la façon dont la seconde table est remplie avec un numéro de client, réception totale et des billets invités et la différence entre diff = reception-guests
Qu'est-ce que Je dois faire est d'exécuter une boucle et insérer le nom, l'information d'adresse dans #final la quantité de fois que diff est par enregistrement.
Par exemple.
#diff_Temp
Les données ressemblent à ceci.
customer_no num_reception num_guests diff
1 5 1 4
2 12 10 2
3 3 1 2
4 32 20 12
5 12 10 2
6 8 6 2
Ce que je dois arriver est qu'il ya une boucle pour le client 1 la boucle passe 4 fois et les données sont saisies 4 fois dans #final
. Pour le client 2, la boucle fonctionnera 2 fois, pour le client 4, elle fonctionnera 12 fois, et ainsi de suite.
Pour chaque client, la boucle exécute le nombre d'heures de la valeur dans la colonne diff. La boucle insère ensuite les données dans #final en fonction d'une requête SQL volumineuse.
Je n'arrive pas à comprendre comment faire un curseur ou une boucle ici.
Ceci est le script que j'ai - il fonctionne mais ne fait rien. Lorsque j'exécute le curseur interne seulement, il prend la quantité de lignes (6) et entre dans chaque rangée 6 fois. Pas ce que je veux.
nouveau script mise à jour:
DECLARE @Iteration INT = 1 -- Loop
DECLARE @diff INT = 1 -- Cursor
DECLARE @owner_customer_no INT -- Cursor
BEGIN
DECLARE loop_cursor CURSOR FOR
SELECT owner_customer_no, diff
FROM #diff_temp
OPEN loop_cursor
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Iteration = 1
WHILE @Iteration <= @diff
BEGIN
insert into #final
select distinct
e.customer_no,
0 as guest_cust_no,
h.fname,
...
where e.campaign_no = 1119
and sc.coding_scenario = 2
PRINT @Iteration
PRINT @diff
PRINT @owner_customer_no
SET @Iteration = @Iteration + 1
END
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff
END
CLOSE loop_cursor
DEALLOCATE loop_cursor
END
Ce code génère les éléments suivants
(6 row(s) affected)
iteration 1
diff 4
customer 1
(6 row(s) affected)
iteration 2
diff 4
customer 1
(6 row(s) affected)
iteration 3
diff 4
customer 1
(6 row(s) affected)
iteration 4
diff 4
customer 1
(6 row(s) affected)
iteration 1
diff 2
customer 2
(6 row(s) affected)
iteration 2
diff 2
customer 2
Chaque itération/boucle est d'insérer 6 lignes - ce que je veux faire est d'insérer une ligne.
Pourquoi pensez-vous que vous ne pouvez pas comprendre? Quel code avez-vous essayé et quelle erreur avez-vous eu? –
@ TabAlleman - j'ai essayé, quelques choses qui sont où je suis coincé. J'ai ajouté le code dans la question. – Elizabeth
De ce qui est posté il n'y a pas besoin de boucle ici. Cela consiste simplement à insérer des données qui peuvent et doivent éviter les boucles. –