동일한 작업을 완료하기 위해 서로 다른 매개변수를 사용하여 여러 저장 프로시저(stored PROcedure)를 만드는 것은 항상 큰 부담입니다. 이 작업은 XML 문자열을 사용하여 저장 프로시저에 매개변수를 보내면 단순화될 수 있으며, 이는 또한 COM 구성 요소의 디자인을 더 쉽게 만듭니다.
이를 달성하는 방법은 매개변수를 XML 문자열로 전달하고 XML을 구문 분석하여 필요한 데이터를 검색한 다음 통합에 필요한 기능을 구현하는 것입니다. XML을 통해 일부 매개변수를 얻을 수 있을 뿐만 아니라 XML로 생성된 DOM 문서에 대한 쿼리를 실행하여 여러 저장 프로시저를 캡슐화할 수도 있습니다. 이를 수행하는 방법에 대한 몇 가지 예를 제공하고 각 예를 간략하게 설명하겠습니다.
이 예에서는 Customer 테이블의 이름 필드를 업데이트하기 위해 여러 매개변수를 전달합니다. 고객 ID(ID 열)와 새 이름 필드를 얻기 위해 XML이 구문 분석됩니다. 프로시저에 전달하는 XML 문자열은 다음과 같습니다.
<root><Customer><customerid>3</customerid><name>Acme Inc.</name></Customer></root>
생성할 저장소 필드는 다음과 같습니다.
CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) ASDECLARE @customeridintDECLARE @customernamevarchar(50)DECLARE @xmldata_idint EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, '' SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint, [name] varchar(50)) EXEC sp_xml_removedocument @xmldata_id UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])WHERE Customer.tblID = @customerid
프로세스가 먼저 수행할 변수를 선언합니다. 관련 정보를 보유하는 데 사용됩니다. 그런 다음 DOM 문서가 열리고 "handle"이 sp_xml_preparedocument 호출의 첫 번째 매개변수로 반환됩니다.
이 호출의 두 번째 인수는 새 DOM 문서에 대한 XML 소스 파일입니다. 이 "핸들"은 OPENXML을 호출할 때 DOM에서 정보를 쿼리하는 데 사용됩니다. OPENXML 호출의 두 번째 매개변수는 실행할 데이터가 포함된 상위 노드의 Xpath 맵입니다.
세 번째 매개변수(2)는 요소 중심 매핑이 사용되도록 지정합니다. WITH 절은 구문 분석된 데이터에 대한 행 집합 형식을 제공하고 sp_xml_removedocument 호출은 DOM 문서의 소스 파일을 삭제합니다.
다음 예에서는 일련의 사용자 ID를 전달하여 여러 데이터 열을 삭제합니다. 다음은 XML 문자열의 내용입니다.
<root><Customer><customerid>1</customerid></Customer><Customer><customerid> 2</customerid></Customer><Customer><customerid>3</customerid></Customer> </root>
해당 저장 프로시저는 다음과 같습니다.
. . . EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, '' DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint)) . . .
이 저장 프로시저에는 ADO를 전달하거나 저장 프로시저를 여러 번 호출하기 위해 긴 SQL 쿼리 문자열을 만들 필요가 없습니다. 이는 또한 다중 통화가 네트워크 트래픽에 미치는 영향을 제거합니다.
보시다시피 Microsoft의 SQL 2000은 전체 프로세스를 좀 더 쉽게 만듭니다. 이 접근 방식의 단점은 SQL 2000이 XML 작업을 수행할 때 XML을 매개 변수로 보내는 것이 8,000자로 제한된다는 점을 명심하십시오. 언제나 그렇듯, 신중한 계획의 이점을 간과하지 마십시오.
OPENXML, sp_xml_preparedocument 및 sp_xml_removedocument에 대한 자세한 내용을 보려면 MSDN 라이브러리를 방문하세요.
위 내용은 XML과 SQL 2000을 사용하여 저장프로시저 호출을 관리하는 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!