Truy vấn đầu tiên của bạn mà bạn khẳng định có tác dụng trên thực tế không hoạt động với XML mà bạn đã cung cấp. Nó sẽ như thế này.
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
Phiên bản thứ hai phải là
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
Vì bạn đang sử dụng SQL Server 2008 trở lên, bạn có thể sử dụng kiểu dữ liệu XML để thay thế.
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)