Sql server 在表中插入N个随机值

Sql server 在表中插入N个随机值,sql-server,sql-server-2008,stored-procedures,Sql Server,Sql Server 2008,Stored Procedures,我需要将带有随机浮点值的@N行插入到一个表中,并将每个新插入行的ID用于另一个插入。所有这些我都需要在存储过程中完成。例如: CREATE PROCEDURE Proc @N int AS -- START LOOP, REPEAT @N TIMES INSERT INTO [T1] ([Value]) VALES (<random_float>) INSERT INTO [T2] ([ValueID]) VALUES (@@IDENTIT

我需要将带有随机浮点值的@N行插入到一个表中,并将每个新插入行的ID用于另一个插入。所有这些我都需要在存储过程中完成。例如:

CREATE PROCEDURE Proc
    @N int
AS

-- START LOOP, REPEAT @N TIMES
INSERT INTO [T1]
    ([Value])
VALES
    (<random_float>)

INSERT INTO [T2]
    ([ValueID])
VALUES
    (@@IDENTITY)
-- END LOOP

END
GO

提前谢谢。

你想做什么还不完全清楚。你的意思是这样的吗:

create table dbo.RandomTable
( 
    rowid int not null PRIMARY KEY,        
    pure_random float null,
)

declare @row int
set @row = 1
while (@row <= @N)
begin
   insert into dbo.RandomTable (rowid, pure_random)
   values (@row, rand())
   set @row = @row + 1
end

[我不提倡使用循环;这不是最有效的方法。这只是海报要求的形式…]

不完全清楚你想做什么。你的意思是这样的吗:

create table dbo.RandomTable
( 
    rowid int not null PRIMARY KEY,        
    pure_random float null,
)

declare @row int
set @row = 1
while (@row <= @N)
begin
   insert into dbo.RandomTable (rowid, pure_random)
   values (@row, rand())
   set @row = @row + 1
end
[我不提倡使用循环;这不是最有效的方法。这只是海报要求的形式…]

无循环,一次插入

;WITH cte AS
(  --there are easier ways to build a numbers table
   SELECT
       ROW_NUMBER() OVER (ORDER BY (select 0)) AS rn
   FROM
      sys.columns c1 CROSS JOIN sys.columns c2 CROSS JOIN sys.columns c3
)
INSERT INTO [T1] ([Value])
OUTPUT INSERTED.ID INTO T2  -- direct insert to T2
SELECT RAND(CHECKSUM(NEWID()))
FROM cte
WHERE rn <= @N;
无循环,一次插入

;WITH cte AS
(  --there are easier ways to build a numbers table
   SELECT
       ROW_NUMBER() OVER (ORDER BY (select 0)) AS rn
   FROM
      sys.columns c1 CROSS JOIN sys.columns c2 CROSS JOIN sys.columns c3
)
INSERT INTO [T1] ([Value])
OUTPUT INSERTED.ID INTO T2  -- direct insert to T2
SELECT RAND(CHECKSUM(NEWID()))
FROM cte
WHERE rn <= @N;
看,还有


请参见和。

在什么边界之间随机浮动?还有@N是否有一个最大值,如果超过这个值,您就不必期望它了?边界并不重要。例如,@min和@max。从实用的角度来看,@N是有限制的。你会用它来插入一万亿行吗?@Martin,我只对方法感兴趣。@N的最大值是另一项业务,这不是我的问题。问这个问题的原因是为了能够给你一个更少的RBAR方法。在循环中插入单行效率很低…在什么边界之间随机浮动?还有@N是否有一个最大值,如果超过这个值,您就不必期望它了?边界并不重要。例如,@min和@max。从实用的角度来看,@N是有限制的。你会用它来插入一万亿行吗?@Martin,我只对方法感兴趣。@N的最大值是另一项业务,这不是我的问题。问这个问题的原因是为了能够给你一个更少的RBAR方法。在循环中插入单行效率很低…@@gbn:是选项MAXRECURSION 0;必需?但它不插入T2?@Mitch Wheat:很好,非递归CTE不需要。Thanks@Martin史密斯:忽略了,修复了,谢谢@gbn:是选项MAXRECURSION 0;必需?但它不插入T2?@Mitch Wheat:很好,非递归CTE不需要。Thanks@Martin史密斯:忽略了,修好了,谢谢