declare @fieldForceCounter as int
declare @SaleDate as dateTime
declare @RandomNoSeed as decimal
set @fieldForceCounter = 1
set @SaleDate = '1 Jan 2009'
set @RandomNoSeed = 0.0
WHILE @fieldForceCounter <= 3
BEGIN
while @SaleDate <= '1 Dec 2009'
begin
INSERT INTO MonthlySales(FFCode, SaleDate, SaleValue) VALUES(@fieldForceCounter, @SaleDate, RAND(@RandomNoSeed))
set @saleDate = @saleDate + 1
set @RandomNoSeed = Rand(@RandomNoSeed) + 1
end
set @SaleDate = '1 Jan 2009'
set @fieldForceCounter = @fieldForceCounter + 1
END
GO
此T-SQL命令应该在“SaleValue
” - 表的“MonthlySales
”列中插入随机值。
但每次都插入'1'。
可能是什么问题?
答案 0 :(得分:4)
两个问题:
我最喜欢的第二个问题是使用一个保证每次返回一个唯一值的函数,比如newid(),将它转换为varbinary,并将其用作种子:)
编辑:经过一些测试后,您似乎需要尝试为@RandomNoSeed
使用不同的数据类型; float的行为与decimal有些不同,但仍接近固定值,所以我建议完全避免使用@RandomNoSeed,只需使用:
INSERT INTO MonthlySales(FFCode, SaleDate, SaleValue)
VALUES(@fieldForceCounter, @SaleDate, RAND(convert(varbinary,newid())))
答案 1 :(得分:2)
这里有重大问题......
十进制问题
十进制的默认精度/比例是38,0。所以你不存储任何小数部分。
所以你只使用RAND(0)进行第一次迭代,RAND(1)进行所有后续迭代,即0.943597390424144和0.713591993212924
我不记得舍入/截断是如何应用的,我不知道SalesValue的数据类型是什么,但舍入每次都会给出“1”。
现在,如果您修复此问题并正确声明小数...
播种问题
RAND采用整数种子。以1.0001或1.3或1.999播种得到相同的值(0.713591993212924)。
所以,“兰德(1.713591993212924)+ 1”=“兰德(1)+ 1”=“1.713591993212924”用于每次后续迭代。
回到原点...
修复
答案 2 :(得分:0)
只是一个猜测,但经常rand函数从0-1生成一个数字。尝试将随机数乘以10。