создание функции с помощью 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

3 ответов


функция не позволит вам использовать 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()))