создание функции с использованием newID () - PullRequest
10 голосов
/ 02 февраля 2010

Я получаю эту ошибку: Есть идеи?

Неправильное использование побочного или зависящего от времени оператора в '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 ]

11 голосов
/ 02 февраля 2010

Вы не можете использовать 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())
8 голосов
/ 02 февраля 2010

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

2 голосов
/ 02 февраля 2010

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

checksum(newid())

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

abs(checksum(newid()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...