문제

테이블 값 함수의 반환 값 인 쿼리 결과에 가짜 열을 삽입해야합니다. 이 열 데이터 유형은 고유 한 식별자 여야합니다. 가장 좋은 방법 (내 생각 ...)은 사용하는 것입니다. 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top