SQL Server 기능 내부 NewId ()
-
12-09-2019 - |
문제
테이블 값 함수의 반환 값 인 쿼리 결과에 가짜 열을 삽입해야합니다. 이 열 데이터 유형은 고유 한 식별자 여야합니다. 가장 좋은 방법 (내 생각 ...)은 사용하는 것입니다. 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
nb는 newId () 대신 newsplits가 순차적이지 않기 때문에 PagesPlits를 유발하기 때문에 newID () 대신 NewSeventient ()를 사용했습니다. 여기를 참조하십시오. NewID와 NewsecientiMID의 차이점을 보여주는 간단한 코드
row_number 함수를 사용할 수 있습니다.
고르다
(row_number () Over (Order by RecordId)) Rownumber,
레코드,
FieldBla1
TableName에서
자세한 내용을 찾으십시오 http://msdn.microsoft.com/ptr/library/ms186734.aspx
제휴하지 않습니다 StackOverflow