IT박스

T-SQL-기본 매개 변수가있는 기능

itboxs 2020. 6. 19. 19:55
반응형

T-SQL-기본 매개 변수가있는 기능


나는이 스크립트를 가지고있다 :

CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
    IF EXISTS ( bla bla bla )
        RETURN 1;
    RETURN 0;
END
GO

이 방법으로 절차에 사용하고 싶습니다.

IF dbo.CheckIfSFExists( 23 ) = 0
    SET @retValue = 'bla bla bla';

하지만 오류가 발생합니다.

프로 시저 또는 함수 dbo.CheckIfSFExists에 대해 충분한 수의 인수가 제공되지 않았습니다.

왜 작동하지 않습니까?


당신은 이것을 이렇게 불러야합니다

SELECT dbo.CheckIfSFExists(23, default)

에서 윈스 테크넷 :

함수의 매개 변수에 기본값이 있으면, 기본값을 검색하기 위해 함수를 호출 할 때 키워드 DEFAULT를 지정해야합니다. 이 동작은 매개 변수를 생략해도 기본값을 암시하는 저장 프로 시저에서 기본값으로 매개 변수를 사용하는 것과 다릅니다. EXECUTE 문을 사용하여 스칼라 함수를 호출 할 때이 동작의 예외가 있습니다. EXECUTE를 사용할 때는 DEFAULT 키워드가 필요하지 않습니다.


매개 변수, DEFAULT 및 EXECUTE를 통해 세 가지 방법으로 호출 할 수 있습니다.

SET NOCOUNT ON;

DECLARE
@Table  SYSNAME = 'YourTable',
@Schema SYSNAME = 'dbo',
@Rows   INT;

SELECT dbo.TableRowCount( @Table, @Schema )

SELECT dbo.TableRowCount( @Table, DEFAULT )

EXECUTE @Rows = dbo.TableRowCount @Table

SELECT @Rows

사용자 정의 함수를 사용하면 기본값이 있더라도 모든 매개 변수를 선언해야합니다.

다음은 성공적으로 실행됩니다.

IF dbo.CheckIfSFExists( 23, default ) = 0
    SET @retValue = 'bla bla bla;

이 문제점을 해결하는 한 가지 방법은 출력 매개 변수와 함께 스토어드 프로 시저를 사용하는 것입니다.

exec sp_mysprocname @ 반환 값 출력, @firstparam = 1, @ secondparam = 2

저장 프로 시저 자체에 설정된 기본값으로 기본값을 전달하지 않는 값. 그리고 출력 변수에서 결과를 얻을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/8358315/t-sql-function-with-default-parameters

반응형