Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Problema con ciclo all'interno di un altro ciclo in sql server
martedì 07 giugno 2005 - 12.46
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
s_dimaio
Profilo
| Junior Member
57
messaggi | Data Invio:
mar 7 giu 2005 - 12:46
Sto lavorando ad una SP che deve riempire una tabella in queta maniera:
Campo 1..................Campo 2
0...........................0
0...........................1
0...........................2
1...........................0
1...........................1
1...........................2
2...........................0
2...........................1
2...........................2
per farlo ho creato un cliclo con il while in questa maniera:
SET @x = 0
SET @y = 0
WHILE @y <= @assey
BEGIN
WHILE @x <= @assex
BEGIN
INSERT INTO Tabella1 VALUES (@y, @x)
SET @x = @x + 1
END
SET @y = @y + 1
END
dove @assey e @assex sono due variabili int che passo alla mia sp (nell'esempio 2 e 2).
Solo non funziona: fa il secondo ciclo ma ignora il primo. In altre parole il risultato è:
Campo 1..................Campo 2
0...........................0
0...........................1
0...........................2
e si ferma qui. Qualche consiglio?
Ciao e grazie
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 7 giu 2005 - 14:01
> Solo non funziona: fa il secondo ciclo ma ignora il primo.
Ciao s_dimaio,
Il tuo codice non è corretto, in quanto dopo il terzo loop nel ciclo più interno, ti dimentichi di azzerare la variabile @x, pertanto ai cicli successivi di quello esterno, non entrerai più in quello interno, e quindi non verrà eseguita l'INSERT.
Per risolvere il problema, ho semplicemente spostato l'inizializzazione a 0 della variabile @x all'interno del ciclo più esterno.
USE tempdb
GO
/* Definisco la tabella dbo.Tabella1 */
CREATE TABLE dbo.Tabella1(
Campo1 int NOT NULL,
Campo2 int NOT NULL
)
GO
/* Definisco la stored procedure dbo.up_FillTable */
CREATE PROCEDURE dbo.up_FillTable(
@assex int,
@assey int
)
AS
DECLARE @x int, @y int
SET @y = 0
WHILE @y <= @assey
BEGIN
SET @x = 0
WHILE @x <= @assex
BEGIN
INSERT INTO Tabella1 VALUES (@y, @x)
SET @x = @x + 1
END
SET @y = @y + 1
END
GO
/* La eseguo */
EXEC dbo.up_FillTable 2, 2
GO
/* Vediamo... */
SELECT *
FROM dbo.Tabella1
GO
/* Output:
Campo1 Campo2
----------- -----------
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
(9 row(s) affected)
*/
/* Pulizia */
DROP PROCEDURE dbo.up_FillTable
DROP TABLE dbo.Tabella1
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
s_dimaio
Profilo
| Junior Member
57
messaggi | Data Invio:
mar 7 giu 2005 - 18:31
Grandissimo, ora funziona!!! Grazie
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !