Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

XML comme paramètre dans la procédure stockée (serveur sql)

Votre première requête que vous prétendez fonctionner ne fonctionne en fait pas avec le XML que vous avez fourni. Ça devrait être comme ça.

declare @handle int
declare @XML xml = '<ROOT><ids><id>2013-01-01</id></ids><ids><id>2013-01-02</id></ids></ROOT>'
exec sp_xml_preparedocument @handle out, @XML
select * from openxml(@handle, '/ROOT/ids', 2) with (id Date)
exec sp_xml_removedocument @handle

La deuxième version devrait être

declare @handle int
declare @XML xml = '<ROOT><id>2013-01-01</id><id>2013-01-02</id></ROOT>'
exec sp_xml_preparedocument @handle out, @XML
select * from openxml(@handle, '/ROOT/id', 2) with (id Date '.')
exec sp_xml_removedocument @handle

Puisque vous utilisez SQL Server 2008 ou une version ultérieure, vous pouvez utiliser le type de données XML à la place.

declare @XML xml = '<ROOT><id>2013-01-01</id><id>2013-01-02</id></ROOT>'

select T.N.value('text()[1]', 'date') as id
from @XML.nodes('ROOT/id') as T(N)