【发布时间】:2017-06-04 16:22:05
【问题描述】:
我有一张每晚都会重写的表格。我有两列需要用一组值列表中的随机数填充。角度列需要填充 15、30、45、60、90,距离需要填充 9、15、21。插入语句最多可以处理 700 条记录。
我尝试使用
创建一个临时表 (@MyRandomVal1)
select 15 union
select 30 union
select 45 etc...
然后使用 (select top 1 val from @MyRandomVal1 order by newid())。这会为所有行使用相同的随机数填充列。似乎我可能需要遍历插入的行,以便它为每一行运行 (select top 1 val from @MyRandomVal1 order by newid()),但是在我的研究中,我读到不推荐使用循环。是否有另一种方法可以在插入期间从集合列表中随机抽样填充 700 多行?
以下是我现有的代码(仅适用于角度)。 SQL Server 2012。
DECLARE @MyRandomVal1 Table (
id int identity (1,1),
val int not null)
INSERT INTO @MyRandomVal1 (val)
SELECT 15
union
SELECT 30
union
SELECT 45
union
SELECT 60
union
SELECT 90
INSERT INTO MyTable (AUTO_KEY,E3_KEY,EMPID,ENAME,COLOR,ANGLE)
SELECT dbo.getautokey(),dbo.GetAutoKey(),[EMPID],[ENAME],abs(checksum(NewId()) % 256),(select top 1 val from @MyRandomVal1 order by newid())
FROM MyTable2 WHERE [JOBLEVEL]='SVP'
谢谢。
【问题讨论】:
-
游标呢?
-
特别是stackoverflow.com/a/31951347/6490059 似乎回答了这个问题。
-
不确定您的标量函数 GetAutoKey 正在做什么,但看起来很有可能探索更改它。标量函数的性能很糟糕,将它们重复地放在 select 语句中并不是一个好方法。改变这个内联表值函数可能被证明是值得的。
标签: sql-server random newid