Наконец я нашел решение:
«Функция» OPENXML для чтения XML на данный момент является лучшим способом.
CREATE PROCEDURE InsertXMLData
(
@XMLDoc XML
)
AS
Быстрее:
DECLARE @handle INT
EXEC sp_xml_preparedocument @handle OUTPUT, @XMLDoc
INSERT INTO TestTable
SELECT * FROM OPENXML (@handle, '/authors', 2) WITH
(au_id INT,
au_lname VARCHAR(20),
au_fname VARCHAR(20)
)
EXEC sp_xml_removedocument @handle
Очень медленный путь:
INSERT INTO TestTable
SELECT
x.item.value('@au_id', 'INT') AS au_id,
x.item.value('@au_lname', 'VARCHAR(20)') AS au_lname
x.item.value('@au_fname', 'VARCHAR(20)') AS au_fname
FROM
@XMLDoc.nodes('/authors') x(item)