Вы можете использовать тип данных xml или OPENXML. Другой автор привел пример типа данных xml, так что вот пример OPENXML.
Хотя это действительно зависит от схемы XML. SQL Server может не понравиться вашей схеме. Если у вас есть контроль над схемой, то это помогает. Возможно, вам придется использовать табличную переменную и создать данные с несколькими вызовами OPENXML для запроса всего.
Например, ввод XML может быть обработан следующим образом:
DECLARE @idoc int
DECLARE @doc nvarchar(max)
SET @doc = '
<xml>
<Entry Type="Error" Start="2008-11-19 02:16:00" End="2008-11-20 04:55:00" />
<Entry Type="Success" Start="2008-11-25 12:45:00" End="2008-11-25 13:01:00" />
</xml>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
SELECT [EventType]
,[EventStart]
,[EventEnd]
FROM OPENXML (@idoc, '//Event',1)
WITH ([Type] varchar(30)
,[Start] varchar(30)
,[End] varchar(30)
)
Одной из проблем, с которыми я столкнулся, был синтаксический анализ дат XML (ISO8601 с 'T' и возможным часовым поясом). В итоге я создал сборку .NET с одной строкой кода, чтобы преобразовать ее в дату и время, которые понравились SQL.