Подтвердить что ты не робот

Newid() внутри функции sql server

Мне нужно вставить поддельный столбец в результате запроса, который является возвращаемым значением функции table-value. Этот тип данных столбца должен быть уникальным идентификатором. Лучший способ (я думаю...) использовать функцию newid(). Проблема в том, что я не могу использовать newid() внутри этого типа функции:

Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
4b9b3361

Ответ 2

Вы можете передать NEWID() в качестве параметра вашей функции.

CREATE FUNCTION SOMEIDFUNCTION
(
    @NEWID1 as varchar(36), @NEWID2 as varchar(36)
)
RETURNS varchar(18)
AS
BEGIN
    -- Do something --
    DECLARE @SFID varchar(18)
    SELECT @SFID = 'DYN0000000' + LOWER(LEFT(@NEWID1,4)) + LEFT(@NEWID2,4) 
    RETURN @SFID
END
GO

Вызвать эту функцию следующим образом:

SELECT dbo.SOMEIDFUNCTION(NewID(),NewID())

Ответ 3

используйте его по умолчанию вместо

create table test(id uniqueidentifier default newsequentialid(),id2 int)

insert test(id2) values(1)

select * from test

NB Я использовал newsequentialid() вместо newid(), поскольку newid() вызывает страницы, поскольку он не является последовательным, см. здесь: Some Simple Code To Показать разницу между Newid и Newsequentialid

Ответ 4

Вы можете использовать функцию ROW_NUMBER:

ВЫБОР
(ROW_NUMBER() OVER (ORDER BY recordID)) как RowNumber,
      recordID,
      fieldBla1
FROM tableName

Найти дополнительную информацию в http://msdn.microsoft.com/pt-br/library/ms186734.aspx