У меня есть хранимая процедура, которая получает список уникальных идентификаторов через XML. Возможно, что одна или несколько строк не будут действительным уникальным идентификатором. SQLServer выдает исключение при этом преобразовании, и вся процедура прерывается.Подавление ошибок при преобразовании строк в uniqueidentifier
Можно ли устранить эти ошибки и продолжить? Если все, кроме одного из идентификаторов, действительны, я хочу, чтобы все данные были действительными идентификаторами, а не сообщение об ошибке, в котором один идентификатор не смог разобрать.
Соответствующий выбор:
SELECT *
FROM dbo.Daily dd
INNER JOIN dbo.Member m ON m.MemberId = dd.MemberID
INNER JOIN OPENXML(@hdoc, 'list_of_guids/id/text()', 1) with (guid uniqueidentifier '.') x
ON x.guid = m.MemberGuid
Пример XML, обратите внимание, что последняя запись недействительна:
<list_of_guids>
<guid>7B8CFAED-8C59-431D-9447-2A45BD4612E5</guid>
<guid>537F4129-0732-4D29-B3B8-4B9127F8522F</guid>
<guid>9965395A-676F-48F2-91CC-F46527D134C</guid>
</list_of_guids>
можно было бы, чтобы преобразовать uniqueidentifiers в VARCHAR, а не наоборот , но это приведет к влиянию производительности, поскольку uniqueidentifier является индексом в таблице участников.
К сожалению, ISUNIQUEIDENTIFIER() не является дополнением к ISNUMERIC() и ISDATE(). В SQL Server 2012 вы можете обернуть последнюю структуру таблицы в подзапрос и использовать TRY_CONVERT(). Вы играли с любым из новых методов XML? Я был удивлен, что OPENXML все еще работает, если честно. :-) –