Вы можете вставить каждую строку с 3 различными значениями столбца с помощью одного оператора вставки в цикле:
WHILE @counter <= @maxCounter
BEGIN
INSERT INTO #Info (DLoc,DCode,Dobs)
VALUES (
'Location_' + CAST(@counter AS VARCHAR(16))
, 'Code_' + CAST(@counter AS VARCHAR(16))
, 'Observation_' + CAST(@counter AS VARCHAR(16))
);
SET @counter = @counter + 1;
END;
В качестве альтернативы, вы можете вставить все строки одновременно в одном операторе INSERT...SELECT
, используя подсчеттаблица в качестве источника.Если у вас нет счетной таблицы, вы можете использовать CTE для генерации набора чисел.В приведенном ниже примере используется CTE
с ROW_NUMBER()
, который может быть расширен при необходимости.
WITH
t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
,t1k AS (SELECT 0 AS n FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
,t1m AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS num FROM t1k AS a CROSS JOIN t1k AS b CROSS JOIN t1k AS c)
INSERT INTO #Info (DLoc,DCode,Dobs)
SELECT
'Location_' + CAST(num AS VARCHAR(16))
, 'Code_' + CAST(num AS VARCHAR(16))
, 'Observation_' + CAST(num AS VARCHAR(16))
FROM t1m
WHERE num <= @maxCounter;
В SQL Server операции на основе множеств обычно опережают процедурные циклические конструкции на порядки.