Как вернуть один атрибут XML из документа XML в SQL Server? - PullRequest
4 голосов
/ 18 ноября 2011

Я просто пытаюсь получить атрибут JobID из некоторого 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) 

Спасибо

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Если вы используете 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 голосов
/ 18 ноября 2011

Добавьте предложение "with" в ваш оператор openxml.

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