首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用newID()创建函数

使用newID()创建函数
EN

Stack Overflow用户
提问于 2010-02-02 18:47:04
回答 3查看 13.2K关注 0票数 10

我一直有这样的错误:有什么想法吗?

无效使用函数中的“newid”中的副作用或时间依赖运算符。

我和MS-SQL Server 2005一起工作。下面是T-SQL语句:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-02 18:54:12

该函数将不允许您使用NewID,但是可以使用它。

代码语言:javascript
复制
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]()

票数 8
EN

Stack Overflow用户

发布于 2010-02-02 18:56:34

不能在函数中使用NEWID()。

一个常见的解决方法(在我的经验中,更多的是GETDATE()的需要)是必须传递它:

代码语言:javascript
复制
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

并称之为:

代码语言:javascript
复制
SELECT dbo.GetNewNumber(NEWID())
票数 11
EN

Stack Overflow用户

发布于 2010-02-02 18:59:01

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

代码语言:javascript
复制
checksum(newid())

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

代码语言:javascript
复制
abs(checksum(newid()))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2186692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档