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
'-table.
但每次都是插入'1'。
可能是什么问题?
两个问题:
- 首先,rand() 函数返回 0 到 1 之间的数字。
- 其次,当在同一查询中多次调用 rand() 时(例如,对于更新语句中的多行),它通常返回相同的数字(我怀疑你上面的算法试图通过将其分成多个调用来解决)
解决第二个问题我最喜欢的方法是使用一个保证每次返回唯一值的函数,例如 newid(),将其转换为 varbinary,并将其用作种子:)
编辑:经过一些测试,似乎您需要尝试使用不同的数据类型@RandomNoSeed
; float 的行为与十进制有些不同,但仍然接近固定值,因此我建议完全避免使用 @RandomNoSeed,而只需使用:
INSERT INTO MonthlySales(FFCode, SaleDate, SaleValue)
VALUES(@fieldForceCounter, @SaleDate, RAND(convert(varbinary,newid())))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)