я пытаюсь генерировать набор строк для матрицы, но @xcolcount
делает только цикл, остающийся на нуле, в то время как внутренний цикл делает то, что ему нужно:
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
Если вы используете таблицу номеров , начиная с нуля, это становится одним оператором на основе набора
;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;
Я думаю, вы просто необходимо сбросить внутренний счетчик обратно на ноль внутри внешнего цикла - я переместил SET @yRowCount = 0
во внешний цикл:
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
С вашим кодом после завершения внутреннего цикла @yRowCount
находился на @heightRow
и никогда не сбрасывался, поэтому внутренний цикл (и, следовательно, оператор INSERT) больше не выполнялся.