有一种方法可以使用NEWID函数生成GUID列表吗?

时间:2014-12-09 15:16:23

标签: sql sql-server sql-server-2008-r2

我需要在SQL Server 2008 R2中创建一个GUID列表,我正在使用NEWID()函数。

这就是我想要的,但我只得到一个ID:

SELECT TOP 100 NEWID() 

我是SQL Server的新手,我不知道是否有办法做到这一点或者创建循环来实现它。

我不需要坚持那些GUID,我只是想在屏幕上显示它们。

4 个答案:

答案 0 :(得分:11)

您可以将任意表用作"序列生成器":

SELECT TOP (100) Guid = NEWID() 
FROM [master]..spt_values;

Demo

请注意,此表仅包含2346行。

值得一读:Generate a set or sequence without loops

答案 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循环。