Flo*_*jon 54 sql-server function newid
我必须在查询结果中插入一个假列,这是表值函数的返回值.此列数据类型必须是唯一标识符.最好的方法(我认为...)是使用newid()
功能.问题是,我不能newid()
在这种类型的功能中使用:
Invalid use of side-effecting or time-dependent operator in 'newid()' within a function.
Run Code Online (Sandbox Code Playgroud)
Don*_*son 96
这是一个聪明的解决方案:
create view getNewID as select newid() as new_id
create function myfunction ()
returns uniqueidentifier
as begin
return (select new_id from getNewID)
end
Run Code Online (Sandbox Code Playgroud)
我不能相信.我在这里找到了它:http: //omnibuzz-sql.blogspot.com/2006/07/accessing-non-deterministic-functions.html
-don
Dan*_*aan 19
您可以将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
Run Code Online (Sandbox Code Playgroud)
像这样调用函数;
SELECT dbo.SOMEIDFUNCTION(NewID(),NewID())
Run Code Online (Sandbox Code Playgroud)
使用它作为默认值
create table test(id uniqueidentifier default newsequentialid(),id2 int)
insert test(id2) values(1)
select * from test
Run Code Online (Sandbox Code Playgroud)
注意,我使用 newsequentialid() 而不是 newid(),因为 newid() 会导致分页,因为它不是顺序的,请参见此处:Some Simple Code To Show The Difference Between Newid And Newsequentialid
归档时间: |
|
查看次数: |
47735 次 |
最近记录: |