【发布时间】:2011-09-16 05:13:30
【问题描述】:
有没有办法在用户定义的函数中生成唯一数字(例如 int)?
rand() 和 newid() 由于副作用而不起作用。
谢谢。
【问题讨论】:
标签: sql-server tsql sql-server-2008 random user-defined-functions
有没有办法在用户定义的函数中生成唯一数字(例如 int)?
rand() 和 newid() 由于副作用而不起作用。
谢谢。
【问题讨论】:
标签: sql-server tsql sql-server-2008 random user-defined-functions
CRYPT_GEN_RANDOM 绕过 NEWID() 限制
SELECT CHECKSUM(CRYPT_GEN_RANDOM(8000))
所以你可以像这样使用它。没有“副作用”错误
CREATE FUNCTION dbo.test ()
RETURNS int
AS
BEGIN
RETURN CHECKSUM(CRYPT_GEN_RANDOM(8000))
END
GO
SELECT dbo.test()
【讨论】:
在 DB2 中,我使用时间戳的微秒部分,但 SQL Server 只使用毫秒。我怀疑这还不够好?
【讨论】:
您还可以使用导致副作用的函数(在本例中为 RAND())定义视图
CREATE VIEW randomView
AS
SELECT RAND() randomResult
GO
然后在你的 UDF 中使用视图
DECLARE @random DECIMAL(18,18)
SELECT @random = randomResult FROM randomView
RETURN @random
【讨论】: