creando una function usando newID ()

Sigo recibiendo este error: ¿Alguna idea?

Uso no válido del operador de efecto secundario o dependiente del time en 'newid' dentro de una function.

Estoy trabajando con MS-SQL Server 2005 . Aquí está la statement de 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 

La function no le permitirá usar el NewID, pero esto puede solucionarse.

 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 

Luego puede usar select dbo.[GetNewNumber]() según lo planeado.

No puede usar NEWID () dentro de una function.

Una solución habitual (en mi experiencia, es más necesario que GETDATE ()) es tener que pasarla:

 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 

Y llámalo así:

 SELECT dbo.GetNewNumber(NEWID()) 

¿Esto tiene que hacerse con una llamada de function? Cada vez que necesito esta funcionalidad, solo uso:

 checksum(newid()) 

Esto generará numbers negativos: si deben ser positivos, podrías usar

 asb(checksum(newid()))