2014-01-21 9 views
1

Невозможно правильно сформулировать вопрос, поэтому не удалось найти то, что я хочу. Все, что мне нужно, это фиктивный стол с одним столбцом, на котором говорят, что я использую его для некоторых других целей. Без фактического написания такого же insert .. newID() n раз, задаваясь вопросом, есть ли элегантное решение.генерировать фиксированное количество строк в таблице

Аналогичный вопрос заключается в том, как заполнить пустую таблицу с помощью столбца int с указанием 1-n чисел.

Row1: 1 
Row2: 2 
....... 
Row100:100 
+1

Взгляните на этот предыдущий вопрос: http://stackoverflow.com/questions/1041163/inserting-n-number-of-records-with-t-sql – sr28

+1

посмотреть этот вопрос: HTTP: // stackoverflow.com/q/1393951/65223 о таблицах чисел –

ответ

1

Этот метод является горячо быстро. Если вам нужно создать таблицу чисел из ничего, это, вероятно, «лучшие» средства.

WITH 
    t0(i) AS (SELECT 0 UNION ALL SELECT 0), 
    t1(i) AS (SELECT 0 FROM t0 a, t0 b), 
    t2(i) AS (SELECT 0 FROM t1 a, t1 b), 
    t3(i) AS (SELECT 0 FROM t2 a, t2 b), 
    n(i) AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) FROM t3) 
SELECT i FROM n WHERE i BETWEEN 1 AND 100 
+0

Я не уверен, что я бы назвал 2,7 миллисекунды за выполнение «блистерно быстрым» по сравнению с 3,1 миллисекундами для других, более простых вариантов на этой странице, но нормально (не забывайте для генерации GUID при тестировании тоже). :-) –

2

Вы можете сделать это рекурсивно.

Для чисел, f.ex .:

WITH r AS (
    SELECT 1 AS n 
    UNION ALL 
    SELECT n+1 FROM r WHERE n+1<=100 
) 
SELECT * FROM r 
1

Один из способов;

;with guids(i, guid) as 
(
    select 1 as i, newid() 
     union all 
    select i + 1, newid() 
     from guids 
     where i < 100 
) 

select guid from guids option (maxrecursion 100) 
2

Вместо рекурсивного CTE я рекомендую подход на основе набора из любого объекта, который, как вы знаете, уже имеет более 100 строк.

--INSERT dbo.newtable(ID, GUID) 
SELECT TOP (100) ROW_NUMBER() OVER (ORDER BY [object_id]), NEWID() 
    FROM sys.all_columns ORDER BY [object_id]; 

Для много других идей, увидеть эту серию:

Смежные вопросы