newid()里面的sql server函数

时间:2009-04-21 13:11:17

标签: sql-server function newid

我必须在查询结果中插入一个假列,这是表值函数的返回值。此列数据类型必须是唯一标识符。最好的方法(我认为......)是使用newid()函数。问题是,我不能在这种类型的函数中使用newid()

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

4 个答案:

答案 0 :(得分:92)

这是一个聪明的解决方案:

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

答案 1 :(得分:17)

您可以将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())

答案 2 :(得分:3)

将其用作默认值

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

insert test(id2) values(1)

select * from test

NB我使用了newsequentialid()而不是newid(),因为newid()会导致pagesplits,因为它不是顺序的,请看这里:Some Simple Code To Show The Difference Between Newid And Newsequentialid

答案 3 :(得分:-3)

您可以使用ROW_NUMBER函数:

选择
(ROW_NUMBER()OVER(ORDER BY recordID))作为RowNumber,
        recordID,
        fieldBla1
FROM tableName

http://msdn.microsoft.com/pt-br/library/ms186734.aspx

上查找更多信息