在函数中使用RAND()

时间:2011-11-28 10:42:48

标签: sql sql-server tsql random sql-function

  

可能重复:
  Creating Nondeterministic functions in SQL Server using RAND()

我需要在函数中生成一些随机的nvarchar。所以我创建了这个函数:

CREATE FUNCTION [dbo].[sfp_GenerateRandomString]    
    (@length int) -- Length of string   
RETURNS NVARCHAR
AS
BEGIN
DECLARE @random NVARCHAR(25) = ''

while @length > 0   
begin
    set @random = @random + nchar((cast(rand()*1000 as int)%26)+97)
    set @length = @length-1
end
return @random      
END

但它不起作用,因为在SQL函数中禁止RAND()函数必须是DETERMINISTIC。而RAND()是NONDETERMINISTIC。

所以我的问题是如何在这种情况下生成随机数? 感谢。

1 个答案:

答案 0 :(得分:0)

如果你真的需要一个函数,你可以使用SQL CLR函数。或者,如果您只需要在一个地方使用它,只需将其放入存储过程即可。

就个人而言,我会选择不在SQL Server内部进行此类工作,如果可以帮助的话。这是应用程序逻辑,而不是数据库逻辑。虽然不知道背后的故事,但我不知道你可能有什么其他限制。