SQLPrepare
SQL Server Native Client ODBC 드라이버는 준비된 SQL 문에서 임시 저장 프로시저를 만듭니다. 저장 프로시저는 문을 여러 번 실행하는 데 효과적이지만 저장 프로시저를 만드는 데는 단순한 문을 실행할 때보다 리소스가 많이 소모됩니다. 일반적으로 응용 프로그램에서 SQL 문을 세 번 이상 전송하는 경우 SQLPrepare와 SQLExecute를 사용하는 것이 좋습니다.
[!참고]
SQL Server는 ODBC의 준비/실행 모델을 지원합니다. 여기서 설명하는 SQLPrepare/SQLExecute 동작에 대한 내용은 7.0 이전의 SQL Server 버전에만 적용됩니다.
SQLPrepare를 사용하여 만든 임시 저장 프로시저의 이름은 **#odbc#**useridentifier로 지정됩니다. 여기서 useridentifier는 최대 6자리의 사용자 이름에 프로시저를 식별하는 최대 8자리 숫자가 연결된 형식입니다.
SQLPrepare는 매개 변수 값이 모두 바인딩되거나 SQL 문에 매개 변수가 없는 경우 임시 저장 프로시저를 만듭니다. SQLExecute는 SQLPrepare가 호출되었을 때 매개 변수가 모두 바인딩되지 않은 경우 프로시저를 만듭니다.
SQLPrepare는 SQLExecute보다 효과적으로 저장 프로시저를 만들며, SQLPrepare를 호출하기 전에 SQLBindParameter를 사용하여 매개 변수를 바인딩하는 것이 좋습니다.
임시 저장 프로시저를 만드는 데 사용하는 CREATE PROCEDURE 문에서 오류가 반환되면 SQLPrepare 또는 SQLExecute가 문 유형에 따라 SET NOEXEC 또는 SET PARSEONLY 옵션이 설정된 상태로 SQL Server에 해당 문을 전송합니다. 그러면 SQL Server에서 문의 구문을 검사하고 발견된 오류를 반환합니다.
SQLExecute는 SQLPrepare에서 반환될 수 있는 모든 ODBC SQLSTATE와 SQL Server 오류를 반환할 수 있습니다.
준비된 문의 SQLBindParameter에 대한 호출에서 InputOutputType, ParameterType, ColumnSize 또는 DecimalDigits 값이 변경된 경우 SQL Server Native Client ODBC 드라이버는 새 임시 저장 프로시저를 만듭니다. 바인딩된 매개 변수가 클라이언트 메모리의 새 버퍼를 가리키거나, 클라이언트 메모리의 길이가 변경되었거나, 길이에 대한 포인터 또는 매개 변수의 표시기 값이 변경된 경우 새 임시 저장 프로시저가 생성되지 않습니다.
권한이 없는 등의 이유로 연결에서 저장 프로시저를 만들지 못하는 경우 SQL Server Native Client ODBC 드라이버는 저장 프로시저를 사용하지 않고 대신 SQLExecute가 호출될 때마다 SQL 문을 전송합니다.
기본적으로 SQL Server Native Client ODBC 드라이버는 연결에 대해 SQLDisconnect가 호출되어 연결이 끊기면 임시 저장 프로시저를 삭제합니다. 이러한 동작은 연결을 무기한으로 유지해야 하는 경우 문제가 될 수 있습니다. 이 기본 동작은 SQL_USE_PROCEDURE_FOR_PREPARE라는 드라이버 관련 연결 옵션을 사용하여 변경할 수 있습니다.
[!참고]
SET NOCOUNT ON이 실행된 경우 저장 프로시저에 포함된 여러 문에서는 여러 결과 집합이 생성되지 않습니다. 이는 드라이버가 저장 프로시저 내의 SQL 문에서 생성된 행 개수를 무시하기 때문입니다.