Основываясь на принятом ответе, я создал его для проверки правильности XML и, при необходимости, для преобразования входной строки в XML (или извлечения необходимых элементов / атрибутов из XML), потому что я выяснил, что TRY_CONVERT работает успешно, если вы просто передаете простой текст, чего я не ожидал, поэтому потребовалась еще одна проверка, чтобы предотвратить окончательное приведение к XML. Мне нужно работать, если в исходном столбце просто содержится какой-то текст (пример строка 1):
declare @T table(ID int, Col1 nvarchar(1000))
insert into @T values
(1, 'random text value 1'),
(2, '<broken> or invalid xml value 2'),
(3, '<root><item>valid xml</item></root>')
select id, Col1,
Converted_XML = CASE
when [Col1] IS NULL THEN NULL /* NULL stays NULL */
when TRY_CONVERT(xml, [Col1]) is null THEN NULL /* Xml Document Error */
when CHARINDEX('<', [Col1]) < 1 AND CHARINDEX('>', [Col1]) < 1 THEN NULL /* no xml */
else CONVERT(xml, [Col1]) /* Parsing succesful. => in this case you can convert string to XML and/or extract the values */
END,
Result_Comment = CASE
when [Col1] IS NULL THEN 'NULL always stays NULL'
when TRY_CONVERT(xml, [Col1]) is null THEN 'Xml Document Error'
when CHARINDEX('<', [Col1]) < 1 AND CHARINDEX('>', [Col1]) < 1 THEN 'no xml'
else [Col1]
END
FROM @T ;