저장 프로시저 호출

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

SQL Server Native Client ODBC 드라이버는 저장 프로시저를 실행하기 위해 ODBC CALL 이스케이프 시퀀스와 Transact-SQLEXECUTE 문을 모두 지원합니다. ODBC CALL 이스케이프 시퀀스가 기본 메서드입니다. ODBC 구문을 사용하면 애플리케이션이 저장 프로시저의 반환 코드를 검색할 수 있으며 SQL Server Native Client ODBC 드라이버도 SQL Server 실행하는 컴퓨터 간에 RPC(원격 프로시저) 호출을 보내기 위해 원래 개발된 프로토콜을 사용하도록 최적화됩니다. 이 RPC 프로토콜은 서버에서 수행되는 매개 변수 처리와 문 구문 분석의 대부분을 제거하여 성능을 향상시킵니다.

참고

ODBC와 함께 명명된 매개 변수를 사용하여 SQL Server 저장 프로시저를 호출하는 경우(자세한 내용은 이름으로 매개 변수 바인딩(명명된 매개 변수) 매개 변수 이름은 '@' 문자로 시작해야 합니다. 이는 SQL Server에만 적용되는 제한 사항입니다. SQL Server Native Client ODBC 드라이버는 MDAC(Microsoft Data Access Components)보다 더 엄격하게 이 제한을 적용합니다.

프로시저를 호출하는 ODBC CALL 이스케이프 시퀀스는 다음과 같습니다.

{[?=]callprocedure_name[([parameter][,[parameter]]...)]}

여기서 procedure_name 프로시저의 이름을 지정하고 매개 변수 는 프로시저 매개 변수를 지정합니다. 명명된 매개 변수는 ODBC CALL 이스케이프 시퀀스를 사용하는 문에서만 지원됩니다.

프로시저는 0개 이상의 매개 변수를 가질 수 있고 값(구문 시작에 나오는 선택적 매개 변수 표식인 ?=로 표시됨)을 반환할 수도 있습니다. 매개 변수가 입력 또는 입/출력 매개 변수인 경우 리터럴 또는 매개 변수 표식을 사용할 수 있습니다. 매개 변수가 출력 매개 변수인 경우에는 출력을 알 수 없기 때문에 매개 변수 표식을 사용해야 합니다. 프로시저 호출 문이 실행되기 전에 매개 변수 마커를 SQLBindParameter 와 바인딩해야 합니다.

입력 및 입/출력 매개 변수는 프로시저 호출에서 생략할 수 있습니다. 매개 변수 없이 괄호만 지정하여 프로시저를 호출하면 드라이버는 첫 번째 매개 변수에 기본값을 사용하도록 데이터 원본에 지시합니다. 예를 들면 다음과 같습니다.

{callprocedure_name( )}

프로시저에 매개 변수가 없으면 프로시저가 실패할 수 있습니다. 괄호 없이 프로시저를 호출하면 드라이버는 아무 매개 변수 값도 보내지 않습니다. 예를 들면 다음과 같습니다.

{callprocedure_name}

프로시저 호출 시 리터럴을 입력 및 입/출력 매개 변수로 지정할 수 있습니다. 예를 들어 InsertOrder 프로시저에는 입력 매개 변수 다섯 개가 있습니다. InsertOrder에 대한 다음 호출은 첫 번째 매개 변수를 생략하고, 두 번째 매개 변수에 대한 리터럴을 제공하며, 세 번째, 네 번째 및 다섯 번째 매개 변수에 대한 매개 변수 마커를 사용합니다. 매개 변수는 1부터 차례대로 번호가 지정됩니다.

{call InsertOrder(, 10, ?, ?, ?)}  

매개 변수를 생략하더라도 다른 매개 변수와 구분하는 쉼표는 생략하면 안 됩니다. 입력 또는 입/출력 매개 변수를 생략할 경우 프로시저는 매개 변수의 기본값을 사용합니다. 매개 변수에 바인딩된 길이/표시기 버퍼의 값을 SQL_DEFAULT_PARAM으로 설정하거나, DEFAULT 키워드를 사용하여 입력 또는 입/출력 매개 변수의 기본값을 지정할 수도 있습니다.

입/출력 매개 변수를 생략하거나, 매개 변수에 리터럴을 제공하면 드라이버는 출력 값을 삭제합니다. 마찬가지로 프로시저의 반환 값에 대한 매개 변수 표식을 생략하면 드라이버는 반환 값을 삭제합니다. 마지막으로, 애플리케이션에서 값을 반환하지 않는 프로시저에 대해 반환 값 매개 변수를 지정하면 드라이버는 매개 변수에 바인딩된 길이/표시기 버퍼의 값을 SQL_NULL_DATA로 설정합니다.

CALL 문의 구분 기호

기본적으로 SQL Server Native Client ODBC 드라이버는 ODBC { CALL } 이스케이프 시퀀스에 특정한 호환성 옵션도 지원합니다. 드라이버는 다음과 같이 전체 저장 프로시저 이름을 구분하는 큰따옴표 쌍 하나만 사용하는 CALL 문을 허용합니다.

{ CALL "master.dbo.sp_who" }  

기본적으로 SQL Server Native Client ODBC 드라이버는 ISO 규칙을 따르고 각 식별자를 큰따옴표로 묶는 CALL 문도 허용합니다.

{ CALL "master"."dbo"."sp_who" }  

그러나 기본 설정을 사용하여 실행하는 경우 SQL Server Native Client ODBC 드라이버는 ISO 표준에 의해 식별자에 적법으로 지정되지 않은 문자를 포함하는 식별자와 함께 따옴표 붙은 식별자 형식을 사용하는 것을 지원하지 않습니다. 예를 들어 드라이버는 따옴표 붙은 식별자가 있는 CALL 문을 사용하여 "My.Proc" 라는 저장 프로시저에 액세스할 수 없습니다.

{ CALL "MyDB"."MyOwner"."My.Proc" }  

드라이버는 이 문을 다음과 같이 해석합니다.

{ CALL MyDB.MyOwner.My.Proc }  

서버에서 MyDB 라는 연결된 서버가 존재하지 않는다는 오류가 발생합니다.

다음과 같이 대괄호로 묶은 식별자를 사용할 경우에는 이 문제가 발생하지 않고 문이 제대로 해석됩니다.

{ CALL [MyDB].[MyOwner].[My.Table] }  

참고 항목

저장 프로시저 실행