2016-11-01 5 views
1

Использования Ruby, вы можете произвести массив со следующим кодом:SQL Server: Создание строки динамического диапазона с помощью оператора выбора

some_range = (1..10).to_a 
# Returns => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Я ищу что-то подобное в SQL Server с помощью ЗЕЬЕСТА. то есть я хотел бы эту таблицу:

id 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
etc 

С утверждением, что выглядит примерно так:

DECLARE @ids TVP 
INSERT @ids 
    (id) 
SELECT RANGE(0..10000) 

Мой случай использования является то, что я хочу быстрый способ тестирования ПЛов, который принимает @ids, как ТВП. Обеспечивает ли SQL Server что-то, что достигает этого?

ответ

1

Я обычно использую рекурсивный КТР как это, если я хочу, чтобы создать таблицу чисел:

;WITH NumberGen AS 
(
    SELECT 1 AS Number 
    UNION ALL 
    SELECT Number + 1 AS Number 
    FROM NumberGen 
    WHERE Number < $#RowsToBeGenerated$ 
) 
INSERT INTO $Table$($Field$) 
    ( 
     SELECT Number 
     FROM NumberGen 
     WHERE Number BETWEEN 1 AND $#RowsToBeGenerated$ 
    ) 
    OPTION (MAXRECURSION 0); 
+0

Спасибо. Есть ли причина, по которой вы используете $ variable $ вместо , для sql-запросов с точки зрения условностей? –

+0

Нет, я использую знак $ в своих отрывках в качестве заполнителя для фактических значений. Они не имеют реального значения. –

+0

Я ударил предел стека рекурсии при попытке сгенерировать более 100 строк. («Максимальная рекурсия 100 исчерпана до завершения заявки»). Знаете ли вы об этом? Я надеялся генерировать строки 100k + –

1
DECLARE @Range INT = 10 

    ;with cte 
    as 
    (
    select 1 as value 
    union all 
    select value + 1 from cte where value < @Range 
    ) 
    select * from cte 
Смежные вопросы