Newid() внутри функции sql server
Мне нужно вставить поддельный столбец в результате запроса, который является возвращаемым значением функции table-value. Этот тип данных столбца должен быть уникальным идентификатором. Лучший способ (я думаю...) использовать функцию newid()
. Проблема в том, что я не могу использовать newid()
внутри этого типа функции:
Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
Ответы
Ответ 1
здесь умное решение:
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
-don
Ответ 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