我尝试使用标量值函数实现以下链接,SQL Server 2000 返回错误消息:函数内使用 'newid' 无效。
http://www.bennadel.com/blog/310-Ask-Ben-Getting-A-Random-Date-From-A-Date-Range-In-SQL.htm
有什么办法可以解决这个问题吗?
在 SQL 2000 中,您不能在其他函数中使用非确定性函数。
执行此操作的最佳方法是在外部查询中使用子查询。无论如何,它的性能都会比标量函数更好,根据我的博客:http://msmvps.com/blogs/robfarley/archive/2009/12/05/dangers-of-begin-and-end.aspx
我发现执行此操作的唯一方法是创建一个选择 NEWID() 值的视图,然后在函数内使用此视图。
为什么不一直传入NEW_ID()作为参数呢?使用视图有点过分了,恕我直言
ALTER FUNCTION dbo.MyFunc (
@param1 int,
@param2 datetime,
@GUID uniqueidentifier
)
RETURNS int
AS
....
SELECT dbo.MyFunc (1, '20091221', NEWID())
你可以使用这个(在 SQL SERVER 中)
-- ================================================= -- 选择 [dbo].GenerateOTP -- ================================================= 创建函数 [dbo].[生成OTP]( @Newid唯一标识符 ) 返回 VARCHAR(10) 开始
DECLARE @OTP varchar(10) =null
SET @OTP = (SELECT Cast(CAST(CHECKSUM(CAST(@Newid AS varbinary(64))) AS int) % 1000000000 + 10000000000 AS varchar(15)));
return @OTP
结束
您可以调用下面的函数 AS
选择[dbo].生成OTP