無法正確提出問題,因此無法搜索我想要的內容。我所需要的只是一個虛擬表,其中有一列說GUID,我用它來用於其他目的。沒有實際編寫n次相同的insert .. newID()
,想知道是否有一個優雅的解決方案。在表格中生成固定行數
類似的問題是我如何填充一個空的表與int列與說1 - n號碼。
Row1: 1
Row2: 2
.......
Row100:100
無法正確提出問題,因此無法搜索我想要的內容。我所需要的只是一個虛擬表,其中有一列說GUID,我用它來用於其他目的。沒有實際編寫n次相同的insert .. newID()
,想知道是否有一個優雅的解決方案。在表格中生成固定行數
類似的問題是我如何填充一個空的表與int列與說1 - n號碼。
Row1: 1
Row2: 2
.......
Row100:100
這種方法是極快。如果你需要從空中生成一個數字表,它可能是「最好」的意思。
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
我不確定每次執行「會快速」調用2.7毫秒,而對於此頁面上的其他更簡單的變化,則爲3.1毫秒,但可以(請不要忘記在測試時也生成GUID)。 :-) –
你可以遞歸地做到這一點。
對於數字,f.ex:
WITH r AS (
SELECT 1 AS n
UNION ALL
SELECT n+1 FROM r WHERE n+1<=100
)
SELECT * FROM r
的一種方式;
;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)
而不是遞歸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];
對於很多其他的想法,看到這個系列:
看看這個前面的問題:http://stackoverflow.com/questions/1041163/inserting-n-number-of-records-with-t-sql – sr28
看這個問題:HTTP:// stackoverflow.com/q/1393951/65223關於數字表 –