문 매개 변수

매개 변수는 SQL 문의 변수입니다. 예를 들어 파트 테이블에 PartID, Description 및 Price라는 열이 있다고 가정합니다. 매개 변수 없이 파트를 추가하려면 다음과 같은 SQL 문을 생성해야 합니다.

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

이 문은 새 순서를 삽입하지만 삽입할 값은 애플리케이션에서 하드 코딩할 수 없으므로 주문 항목 애플리케이션에 적합하지 않습니다. 대안은 삽입할 값을 사용하여 런타임에 SQL 문을 생성하는 것입니다. 런타임에 문을 생성하는 복잡성 때문에 이는 좋은 솔루션이 아닙니다. 가장 좋은 해결 방법은 VALUES 절의 요소를 물음표(?) 또는 매개 변수 표식으로 바꾸는 것입니다.

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

그런 다음 매개 변수 표식이 애플리케이션 변수에 바인딩됩니다. 새 행을 추가하려면 애플리케이션에서 변수 값을 설정하고 문을 실행하기만 합니다. 그런 다음 드라이버가 변수의 현재 값을 검색하여 데이터 원본에 보냅니다. 문이 여러 번 실행되는 경우 애플리케이션은 문을 준비하여 프로세스를 더욱 효율적으로 만들 수 있습니다.

방금 표시된 문은 주문 항목 애플리케이션에서 하드 코딩되어 새 행을 삽입할 수 있습니다. 그러나 매개 변수 표식은 세로 애플리케이션으로 제한되지 않습니다. 모든 애플리케이션의 경우 텍스트로의 변환을 방지하여 런타임에 SQL 문을 생성하는 데 어려움을 덜어줍니다. 예를 들어 방금 표시된 파트 ID는 애플리케이션에 정수로 저장될 가능성이 높습니다. SQL 문이 매개 변수 표식 없이 생성된 경우 애플리케이션은 파트 ID를 텍스트로 변환해야 하며 데이터 원본은 이를 다시 정수로 변환해야 합니다. 애플리케이션은 매개 변수 표식을 사용하여 파트 ID를 정수로 드라이버에 보낼 수 있으며, 일반적으로 데이터 원본에 정수로 보낼 수 있습니다. 이렇게 하면 두 번의 변환이 저장됩니다. 긴 데이터 값의 경우 이러한 값의 텍스트 형식이 SQL 문의 허용 길이를 초과하는 경우가 많기 때문에 매우 중요합니다.

매개 변수는 SQL 문의 특정 위치에서만 유효합니다. 예를 들어 select 목록(SELECT 문에서 반환할 열 목록)에는 허용되지 않으며 매개 변수 형식을 확인할 수 없으므로 등호(=)와 같은 이진 연산자의 두 피연산자로 허용되지 않습니다. 일반적으로 매개 변수는 DML(데이터 조작 언어) 문에서만 유효하며 DDL(데이터 정의 언어) 문에서는 유효하지 않습니다. 자세한 내용은 부록 C: SQL 문법의 매개 변수 표식을 참조하세요.

SQL 문이 프로시저를 호출할 때 명명된 매개 변수를 사용할 수 있습니다. 명명된 매개 변수는 SQL 문의 위치가 아니라 이름으로 식별됩니다. SQLBindParameter 호출로 바인딩할 수 있지만 매개 변수는 SQLBindParameter의 ParameterNumber 인수가 아닌 IPD(구현 매개 변수 설명자)의 SQL_DESC_NAME 필드로 식별됩니다. SQLSetDescField 또는 SQLSetDescRec를 호출하여 바인딩할 수도 있습니다. 명명된 매개 변수에 대한 자세한 내용은 이 섹션의 뒷부분에 있는 이름별 바인딩 매개 변수(명명된 매개 변수)를 참조하세요. 설명자에 대한 자세한 내용은 설명자를 참조 하세요.

이 섹션에서는 다음 항목을 다룹니다.