2015-10-09 5 views
0

Я хочу вставить несколько строк на основе значения предела в таблицу SQL Server, которая имеет столбец с именем Sequence.Вставить несколько строк в таблицу SQL Server 2008 без циклов

Метод, который я использую это WHILE цикла, и мой код:

Declare @Limit bigint = 1, @Increment bigint = 0 

While (@Increment <= (@Limit)) 
Begin 
    Insert into MY_TABLE (Sequence) values (@Increment) 

    Set @Increment = @Increment + 1 
End 

Пожалуйста, есть ли другой способ SQL для достижения этой строки вставки случая без использования циклов?

ответ

2

Следующая статья должна помочь: Generate a set or sequence without loops

В общем, самый быстрый способ заключается в использовании многослойного КТР в сочетании с ROW_NUMBER():

DECLARE @Limit BIGINT = 10, 
     @Increment BIGINT = 1; 

WITH N1 AS (SELECT N FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n (N)), 
N2 (N) AS (SELECT 1 FROM N1 AS N1 CROSS JOIN N1 AS N2), 
N3 (N) AS (SELECT 1 FROM N2 AS N1 CROSS JOIN N2 AS N2), 
N4 (N) AS (SELECT 1 FROM N3 AS N1 CROSS JOIN N3 AS N2), 
N5 (N) AS (SELECT 1 FROM N4 AS N1 CROSS JOIN N4 AS N2) 
INSERT INTO MY_TABLE (Sequence) 
SELECT TOP (@Limit/(@Increment + 1)) 
     ROW_NUMBER() OVER(ORDER BY N) * (@Increment + 1) 
FROM N5; 
Смежные вопросы