Sql server 在表中插入N个随机值
我需要将带有随机浮点值的@N行插入到一个表中,并将每个新插入行的ID用于另一个插入。所有这些我都需要在存储过程中完成。例如: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
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史密斯:忽略了,修好了,谢谢