저장 프로시저 호출
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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 와 바인딩해야 합니다.
입력이나 입력 및 출력 매개 변수는 프로시저 호출에서 생략될 수 있습니다. 프로시저가 괄호로 호출되지만 매개 변수가 없는 경우 드라이버는 데이터 원본에 첫 번째 매개 변수의 기본값을 사용하도록 지시합니다. 예시:
{call procedure_name( )}
프로시저에 매개 변수가 없으면 프로시저가 실패할 수 있습니다. 괄호 없이 프로시저를 호출하면 드라이버는 아무 매개 변수 값도 보내지 않습니다. 예시:
{call procedure_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] }