создание функции с помощью 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
10
задан gotqn 30 July 2015 в 08:40
поделиться

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] () , как и планировалось.

8
ответ дан 3 December 2019 в 18:33
поделиться

Вы не можете использовать 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())
11
ответ дан 3 December 2019 в 18:33
поделиться

Это нужно делать с помощью вызова функции? Когда мне нужна эта функция, я просто использую:

checksum(newid())

Это будет генерировать отрицательные числа - если они должны быть положительными, вы можете использовать

abs(checksum(newid()))
2
ответ дан 3 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: