IIS 6 서버의 웹 사이트 목록을 SQL Server 테이블로 가져 오려고합니다. WMI 등으로 얻을 수는 있지만 상자에 추가 서비스가 있어야합니다. 반면 OPENXML을 사용하여 MetaBase.xml 파일을 구문 분석하는 데 proc을 사용하여 정보를 찾을 수 있어야합니다.OPENXML을 사용하여 IIS MetaBase.xml을 구문 분석
<configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0">
<MBProperty>
<IIsWebDirectory Location="/LM/W3SVC/1/ROOT/MySite1" AppFriendlyName="MySite1" AppIsolated="2" AppPoolId="MySite1" AppRoot="/LM/W3SVC/1/ROOT/MySite1" DontLog="TRUE">
</IIsWebDirectory>
<IIsWebDirectory Location="/LM/W3SVC/1/ROOT/MySite2" AppFriendlyName="MySite2" AppIsolated="2" AppPoolId="MySite2" AppRoot="/LM/W3SVC/1/ROOT/MySite2" DontLog="TRUE">
</IIsWebDirectory>
</MBProperty>
</configuration>
나는 그것을 구문 분석하려고 다음과 같은 SQL을 사용하고 있습니다 :
DECLARE @XMLPath VARCHAR(MAX)
SELECT @XMLPath = 'C:\Temp\MetaBase.xml'
DECLARE @RawXML XML, @sql NVARCHAR(4000), @params NVARCHAR(4000), @handle INT
SELECT @sql = N'SELECT @res = (SELECT * FROM OPENROWSET (BULK '''+ @XMLPath +''', SINGLE_BLOB)x)'
SELECT @params = N'@res XML OUTPUT'
EXEC sp_executesql @sql, @params, @res = @RawXML OUTPUT
SELECT @RawXML
EXEC sp_xml_preparedocument @handle OUTPUT, @RawXML
SELECT *
FROM OPENXML(@handle, 'MBProperty/IISWebDirectory', 3) WITH (AppFriendlyName VARCHAR(800), Location VARCHAR(800), AppRoot VARCHAR(800), AppPoolId VARCHAR(800), DefaultDoc VARCHAR(800))
EXEC sp_xml_removedocument @handle
을 MetaBase.xml의에 익숙하지 않은 당신의 사람들을 위해
, 관련 부분은 약간 다음과 같이
XML이 @RawXML에 올바르게로드되었지만 OPENXML 쿼리에서 아무 것도 얻지 못합니다. 아마도 그 경로와 관련이있는 것으로 추측하고 있지만 조합 (예 : 'configuration/MBProperty/IISWebDirectory')을 사용해 보았습니다.
이 접근법은 많은 수준에서 결함이 있습니다. 내 대답을 보라. – Kev
기술적으로 그것이 내 문제를 해결했기 때문에이 하나를 수락했습니다 :) – Skrealin