Sql server sql server函数中的newid()

Sql server sql server函数中的newid(),sql-server,function,newid,Sql Server,Function,Newid,我必须在查询结果中插入一个伪列,它是表值函数的返回值。此列数据类型必须是唯一标识符。最好的方法(我认为…)是使用newid()函数。问题是,我不能在这类函数中使用newid(): Invalid use of side-effecting or time-dependent operator in 'newid()' within a function. 将其用作默认值 create table test(id uniqueidentifier default newsequentialid(

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

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

将其用作默认值

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

insert test(id2) values(1)

select * from test

注意:我使用了newsequentialid()而不是newid(),因为newid()会导致页面拆分,因为它不是连续的,请参见此处:

您可以使用ROW\u NUMBER函数:

Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
选择
(按记录ID排序)上的行号()作为行号,
记录ID,
fieldBla1
从表名


更多信息请访问

这里有一个聪明的解决方案:

create view getNewID as select newid() as new_id

create function myfunction ()
returns uniqueidentifier
as begin
   return (select new_id from getNewID)
end
这是我无法相信的。我在这里找到的:

-don

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

函数不允许包含非确定性运算符。你能发布你的函数定义吗?是的,不幸的是有些人在没有意识到它是集群的情况下将其作为PK…相信我,我见过很多这样的例子