我一直收到这个错误:有什么想法吗?
在函数中的'newid'中无效使用副作用或时间相关运算符。
我正在使用MS-SQL Server 2005
。这是T-SQL
声明:
Create Function [dbo].[GetNewNumber]( )
RETURNS int
AS
BEGIN
Declare @code int
set @code = (SELECT CAST(CAST(newid() AS binary(3)) AS int) )
RETURN (@code)
END
答案 0 :(得分:11)
您不能在函数中使用NEWID()。
通常的解决方法(根据我的经验,更需要GETDATE())是必须传递它:
Create Function [dbo].[GetNewNumber](@newid UNIQUEIDENTIFIER )
RETURNS int
AS
BEGIN
Declare @code int
set @code = (SELECT CAST(CAST(@newid AS binary(3)) AS int) )
RETURN (@code)
END
并称之为:
SELECT dbo.GetNewNumber(NEWID())
答案 1 :(得分:8)
该功能不允许您使用NewID,但这可以解决。
Create View vwGetNewNumber
as
Select Cast(Cast(newid() AS binary(3)) AS int) as NextID
Create Function [dbo].[GetNewNumber] ( ) RETURNS int
AS
BEGIN
Declare @code int
Select top 1 @code=NextID from vwGetNewNumber
RETURN (@code)
END
然后您可以按计划使用select dbo.[GetNewNumber]()
。
答案 2 :(得分:2)
这是否必须通过函数调用完成?每当我需要这个功能时,我只需使用:
checksum(newid())
这将产生负数 - 如果它们必须是正数,则可以使用
abs(checksum(newid()))