sql >> Database teknologi >  >> RDS >> Sqlserver

XML som parameter i lagret procedure (sql server)

Din første forespørgsel, som du hævder virker, fungerer faktisk ikke med den XML, du har angivet. Det burde være sådan her.

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 anden version skal være

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

Da du bruger SQL Server 2008 eller nyere, kan du bruge XML-datatypen i stedet.

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. SQLiteDatabase fejl sqlite:(1) nær ):syntaksfejl

  2. De første to lønninger i hver afdeling

  3. Sådan kalder du en procedure, der bruger den samme tabel i efter trigger

  4. Forhindrer JDBC-specifikationen '?' fra at blive brugt som operator (uden for anførselstegn)?