2011-11-17 2 views
4

다음 스크립트를 사용하여 일부 XML에서 JobID 특성을 가져 오려고합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?SQL Server의 XML 문서에서 단일 XML 특성을 반환하는 방법은 무엇입니까?

PROCEDURE [dbo].[spProcessJobXML] 
@XMLPACKET as nvarchar(MAX) --<Root><Job JobID='2'></Root> 
AS 
-- Declare XML doc handle 
declare @docHandle int 
Declare @jobid nvarchar(3); 
Declare @parentid int; 
declare @testInt int; 

-- Create XML Doc 
exec sp_xml_preparedocument @docHandle OUTPUT, @XMLPACKET 


if exists (
SELECT * FROM tempdb.sys.tables WHERE [name] like '#tempTable%' 
) 
DROP TABLE tempdb.#tempTable; 


SELECT * INTO #tempTable FROM OPENXML (@docHandle, '/Root/Job') 
Select top 1 @parentid = #tempTable.id from #tempTable where #tempTable.localname like 'JobID'; 
--select * from #tempTable; 
Select top 1 @jobid = #tempTable.[text] from #tempTable where #tempTable.parentid = @parentid; 
SET @testInt = CAST(@jobid AS int) 

감사

답변

3

SQL Server 2005 이상을 사용하는 경우 대신 XML 데이터 형식을 사용할 수 있습니다.

declare @testInt int 
declare @XMLPACKET as xml 
set @XMLPACKET = '<Root><Job JobID="2"/></Root>' 

set @testInt = @XMLPACKET.value('(/Root/Job)[1]/@JobID', 'int') 
0

은 당신의 OPENXML 문에 절 "과"추가합니다.

SELECT JobID 
FROM 
OPENXML (@docHandle, '/Root/Job') with (JobID int '@JobID')