programing tip

SQL Server 함수 내부의 newid ()

itbloger 2021. 1. 11. 07:44
반응형

SQL Server 함수 내부의 newid ()


테이블 값 함수의 반환 값인 쿼리 결과에 가짜 열을 삽입해야합니다. 이 열 데이터 유형은 고유 식별자 여야합니다. (내 생각에 ...) 가장 좋은 방법은 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 () 대신 newsequentialid ()를 사용했습니다. newid ()는 순차적이 아니기 때문에 pagesplits를 유발하므로 여기를 참조하십시오 : 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 에서 확인하세요 .

참조 URL : https://stackoverflow.com/questions/772517/newid-inside-sql-server-function

반응형