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