2010-08-21 4 views
1

Je suis en train de générer un ensemble de lignes pour une matrice, mais la @xcolcount ne fait que sur la boucle restant à zéro alors que la boucle intérieure fait ce qu'il doit:SQL imbriqué stored proc sans boucle

Declare @xColCount int 
Declare @yRowCount int 
set @xColCount = 0 
set @yRowCount = 0 

WHILE (@xColCount < @widthCol) 
BEGIN 
    WHILE (@yRowCount < @heightRow) 
    BEGIN 
     -- do the insert 
     INSERT  
     INTO Scenario.MapCell(Guid, Map, Col, ColAplha, Row) 
     VALUES (newID(), @mapGuid, @xColCount, 'A', @yRowCount) 

     SET @yRowCount = @yRowCount + 1 
    END 

    SET @xColCount = @xColCount + 1 
END 

Répondre

2

I pensez-vous juste besoin de réinitialiser votre compteur interne à zéro dans la boucle extérieure - je me suis déplacé le SET @yRowCount = 0 dans la boucle extérieure:

DECLARE @xColCount int 
DECLARE @yRowCount int 

SET @xColCount = 0 

WHILE (@xColCount < @widthCol) 
BEGIN 
    SET @yRowCount = 0 

    WHILE (@yRowCount < @heightRow) 
    BEGIN 
     -- do the insert 
     INSERT INTO Scenario.MapCell(Guid, Map, Col, ColAplha, Row) 
     VALUES(newID(), @mapGuid, @xColCount, 'A', @yRowCount) 

     SET @yRowCount = @yRowCount + 1 
    END 

    SET @xColCount = @xColCount + 1 
END 

Avec votre code, une fois que la boucle interne terminée, le @yRowCount était à @heightRow et nev er got reset - donc la boucle interne (et donc l'instruction INSERT) ne sera plus exécutée.

+0

je ne suis pas si brillante ............... grâce – phoenixAZ

+1

@ user401217: parfois vous êtes si profond dans votre code, vous ne pouvez plus voir les erreurs les plus évidentes. Ça arrive à tout le monde de temps en temps, je suppose ;-) –

0

Si vous utilisez un numbers table à partir de zéro, cela devient un jeu basé déclaration

;WITH 
    cX AS (SELECT Num AS xColCount FROM NumTable WHERE Num <= @widthCol), 
    cY AS (SELECT Num AS yRow Count FROM NumTable WHERE Num <= @heightRow) 
INSERT Scenario.MapCell(Guid, Map, Col, ColAplha, Row) 
SELECT 
    @mapGuid, xColCount, 'A', yRowCount 
FROM 
    cX CROSS JOIN cY; 
Questions connexes