2014-01-21 51 views
1

無法正確提出問題,因此無法搜索我想要的內容。我所需要的只是一個虛擬表,其中有一列說GUID,我用它來用於其他目的。沒有實際編寫n次相同的insert .. newID(),想知道是否有一個優雅的解決方案。在表格中生成固定行數

類似的問題是我如何填充一個空的表與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)