我有一個存儲過程,通過XML接收唯一標識符列表。有可能一個或多個字符串不會成爲有效的唯一標識符。 SQLServer在此轉換時拋出異常,並且整個過程中止。將字符串轉換爲uniqueidentifier時抑制錯誤
是否可以抑制這些錯誤並繼續?如果除了其中一個ID都有效,我想要有效ID的所有數據,而不是錯誤消息,說明一個ID無法解析。
相關的選擇:
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是成員表上的索引。
遺憾的是ISNUMERIC()和ISDATE()沒有ISUNIQUEIDENTIFIER()補充。在SQL Server 2012中,您可以將最後一個表結構包裝在子查詢中,並使用TRY_CONVERT()。你玩過任何新的XML方法嗎?我很驚訝OPENXML仍然有效,說實話。 :-) –