是否有更简单的方法来填充SQL Server 2008中的列?

时间:2011-09-29 19:36:26

标签: tsql sql-server-2008

我正在创建临时表,我想使用T-SQL填充0-9999的列。

create table #tmp5 (userID int)

是否有更简单的方法来填充列而不是使用循环?

3 个答案:

答案 0 :(得分:3)

有几种方法详细{{3p>

除了循环(有和没有IDENTITY),创造性地使用CTE,ROW_NUMBER等。

答案 1 :(得分:2)

使用GO N --N=number of iterations

CREATE TABLE #tmp5 (userID int IDENTITY(0, 1))
Go
INSERT INTO  #tmp5 DEFAULT VALUES
Go 10000

或者这个:

CREATE TABLE #tmp5 (userID int)   
GO
INSERT INTO  #tmp5 VALUES (0)
GO
DECLARE @N int
SELECT @N=COUNT(*) FROM #tmp5
INSERT INTO  #tmp5 
SELECT userID+@N FROM #tmp5 WHERE userID+@N<10000
Go 14

答案 2 :(得分:0)

use AdventureWorks --Or any database with a sizable amount of objects in it
go

insert into #tmp5 (userID)
select top 9999
  row_number() over (order by (select null)) as UserID
from sys.objects a
cross join sys.objects b 

这基本上是对所有系统对象的row_numbers,而交叉连接确保你有一大堆它们的行号。根据要创建的表的大小和/或sys.objects表的大小,您将需要更多或更少的交叉连接。