sql >> Databasteknik >  >> RDS >> Sqlserver

XML som parameter i lagrad procedur (sql-server)

Din första fråga som du hävdar fungerar fungerar faktiskt inte med den XML du angav. Det borde vara så här.

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

Den andra versionen bör vara

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

Eftersom du använder SQL Server 2008 eller senare kan du använda XML-datatypen istället.

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)



  1. Räkna tabellrader

  2. Välj rader från en tabell, slå samman den senaste raden från en annan tabell med en-till-många-relation

  3. Sparar sökvägen till databasen / SQL

  4. Hur man krypterar data i Oracle med PL SQL