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

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

4 ответов


вот умное решение:

create view getNewID as select newid() as new_id

create function myfunction ()
returns uniqueidentifier
as begin
   return (select new_id from getNewID)
end

Это я не могу взять на себя ответственность. я нашел его здесь: http://omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html

-не


вы можете передать 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())

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

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

insert test(id2) values(1)

select * from test

NB я использовал newsequentialid () вместо newid (), так как newid () вызовет pagesplits, так как он не является последовательным, см. здесь: Некоторый Простой Код, Чтобы Показать Разницу Между Newid И Newsequentialid


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

выберите
(ROW_NUMBER () OVER (ORDER BY recordID)) как номер строки ,
recordID,
fieldBla1
От tableName

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