newid()里面的sql serverfunction

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

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

这是一个聪明的解决scheme:

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

我不能信任。 我在这里find它: http : //omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html

-don

您可以将NEWID()作为parameter passing给您的函数。

 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()会导致pagesplits,因为它不是顺序的,请看这里: 一些简单的代码来显示Newid和Newsequentialid之间的区别

你可以使用ROW_NUMBER函数:

select
(ROW_NUMBER()OVER(ORDER BY recordID))作为RowNumber,
的recordId,
fieldBla1
FROM tableName

有关详细信息,请访问http://msdn.microsoft.com/pt-br/library/ms186734.aspx