Используя образец базы данных Борей и таблицу Сотрудники, вот способ массовой вставки XML
Настраивать
В таблице «Сотрудники» есть эти столбцы
XML выглядит так
Запрос
DECLARE @xml TABLE (x XML)
INSERT @xml
SELECT x
FROM OPENROWSET(BULK 'EmployeesData.xml', SINGLE_BLOB) AS T(x)
INSERT INTO Employees
SELECT
result.LastName,
result.FirstName,
result.Title,
result.TitleOfCourtesy,
result.BirthDate,
result.HireDate,
result.[Address],
result.City,
result.Region,
result.PostalCode,
result.Country,
result.HomePhone,
result.Extension,
result.Photo,
result.Notes,
result.ReportsTo,
result.PhotoPath
FROM @xml
CROSS APPLY (
SELECT
LastName = z.value('LastName[1]', 'nvarchar(20)'),
FirstName = z.value('FirstName[1]', 'nvarchar(10)'),
Title = z.value('Title[1]', 'nvarchar(30)'),
TitleOfCourtesy = z.value('TitleOfCourtesy[1]', 'nvarchar(25)'),
BirthDate = z.value('BirthDate[1]', 'datetime'),
HireDate = z.value('HireDate[1]', 'datetime'),
[Address] = z.value('Address[1]', 'nvarchar(60)'),
City = z.value('City[1]', 'nvarchar(15)'),
Region = z.value('Region[1]', 'nvarchar(15)'),
PostalCode = z.value('PostalCode[1]', 'nvarchar(10)'),
Country = z.value('Country[1]', 'nvarchar(15)'),
HomePhone = z.value('HomePhone[1]', 'nvarchar(24)'),
Extension = z.value('Extension[1]', 'nvarchar(4)'),
Photo = z.value('Photo[1]', 'varbinary(max)'),
Notes = z.value('Notes[1]', 'nvarchar(max)'),
ReportsTo = z.value('ReportsTo[1]', 'int'),
PhotoPath = z.value('PhotoPath[1]', 'nvarchar(255)')
FROM x.nodes('/DocumentElement/Employees') T(z)
) result
Использование OPENROWSET с опцией BULK для чтения XML-файла. Это предоставляет данные в одной строке, и если вы удалите все ниже этого вызова и сделаете выбор * из @xml, вы увидите одну строку со всем XML в ней. Вы хотите убедиться, что путь, который вы передаете в OPENROWSET, является правильным путем к XML.