Я продолжаю получать эту ошибку: Какие-либо Идеи?
Недопустимое использование производящего сторону или зависящего от времени оператора в '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()))