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
'IT박스' 카테고리의 다른 글
Python ValueError : 압축을 풀기에는 값이 너무 많습니다 (0) | 2020.06.19 |
---|---|
CIFS 연결을 강제로 마운트 해제하는 방법 (0) | 2020.06.19 |
C # 오류 : 부모에 인수가 0 인 생성자가 없습니다. (0) | 2020.06.19 |
vector :: resize ()와 vector :: reserve () 중에서 선택 (0) | 2020.06.18 |
부모 POM에 정의 된 Maven 플러그인 비활성화 (0) | 2020.06.18 |