我需要在SQL Server 2008 R2中创建一个GUID列表,我正在使用NEWID()
函数。
这就是我想要的,但我只得到一个ID:
SELECT TOP 100 NEWID()
我是SQL Server的新手,我不知道是否有办法做到这一点或者创建循环来实现它。
我不需要坚持那些GUID,我只是想在屏幕上显示它们。
答案 0 :(得分:11)
您可以将任意表用作"序列生成器":
SELECT TOP (100) Guid = NEWID()
FROM [master]..spt_values;
请注意,此表仅包含2346行。
答案 1 :(得分:3)
你可以这样做:
DECLARE @nbrOf INT
SET @nbrOf=100
;WITH Nbrs ( n ) AS (
SELECT 1 UNION ALL
SELECT 1 + n FROM Nbrs WHERE n < @nbrOf )
SELECT
NEWID()
FROM
Nbrs
OPTION ( MAXRECURSION 0 )
或使用交叉连接:
DECLARE @nbrOf INT
SET @nbrOf=100
;WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
E02(N) AS (SELECT 1 FROM E00 a, E00 b),
E04(N) AS (SELECT 1 FROM E02 a, E02 b),
E08(N) AS (SELECT 1 FROM E04 a, E04 b),
E16(N) AS (SELECT 1 FROM E08 a, E08 b),
E32(N) AS (SELECT 1 FROM E16 a, E16 b),
Nbrs(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
SELECT
NEWID()
FROM
Nbrs
WHERE
Nbrs.N<=@nbrOf
答案 2 :(得分:2)
只需使用循环。请尝试以下方法:
create table #GUIDS (tempID uniqueidentifier)
declare @i int = 0
while (@i < 100)
begin
insert into #GUIDS
select newid()
set @i = @i + 1
end
select * from #GUIDS
drop table #GUIDS
注意:这不是一个很好的解决方案,可用于大量迭代,因为它以逐行方式循环遍历结果。
答案 3 :(得分:0)
create table #GUIDS (tempID uniqueidentifier)
INSERT INTO #GUIDS ([tempID ])VALUES (NEWID())
GO 100
select * from #GUIDS
drop table #GUIDS
这可用于创建100条记录并避免for循环。