我必须在查询结果中插入一个假列,这是一个表值函数的返回值。此列数据类型必须是唯一标识符。最好的方法(我认为......)是使用newid()
函数。问题是,我不能newid()
在这种类型的函数中使用:
Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
我必须在查询结果中插入一个假列,这是一个表值函数的返回值。此列数据类型必须是唯一标识符。最好的方法(我认为......)是使用newid()
函数。问题是,我不能newid()
在这种类型的函数中使用:
Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
这是一个聪明的解决方案:
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
注意我使用 newsequentialid() 而不是 newid() 因为 newid() 会导致分页,因为它不是顺序的,请参见此处:一些简单的代码来显示 Newid 和 Newsequentialid 之间的区别
您可以使用 ROW_NUMBER 函数:
SELECT
(ROW_NUMBER() OVER (ORDER BY recordID) ) as RowNumber ,
recordID,
fieldBla1
FROM tableName
在http://msdn.microsoft.com/pt-br/library/ms186734.aspx找到更多信息