使用newID创建函数()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用newID创建函数()相关的知识,希望对你有一定的参考价值。

我一直收到这个错误:有什么想法吗?

在函数中的'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
答案

该函数不允许您使用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]()

另一答案

您不能在函数中使用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())
另一答案

这是否必须通过函数调用完成?每当我需要这个功能时,我只需使用:

checksum(newid())

这将产生负数 - 如果它们必须是正数,则可以使用

abs(checksum(newid()))

以上是关于使用newID创建函数()的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 函数错误(我不能在 SQL Server 函数中使用 NewID() 吗?)

试图弄清楚为啥 NewID 函数停止在 Oracle 上工作

mysql里有没有象SQL server中newid()这样的函数?

是否有与 SQL Server NewId() 函数等效的 Access?

sql生成随机字符串

sql newid()随机函数