XML을 통해 고유 식별자 목록을받는 저장 프로 시저가 있습니다. 하나 이상의 문자열이 유효한 고유 식별자가 아닐 가능성이 있습니다. 이 변환시 SQLServer에서 예외가 발생하고 전체 프로 시저가 중단됩니다.문자열을 고유 식별자로 변환 할 때 오류를 방지하지 않습니다.
이러한 오류를 억제하고 계속할 수 있습니까? 하나의 ID를 제외한 모든 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>
하나의 가능성은 VARCHAR가 아닌 다른 방법으로 주위에 uniqueidentifiers를 변환하는 것입니다 그러나 uniqueidentifier는 구성원 테이블의 인덱스이므로 성능에 영향을 줄 수 있습니다.
슬프게도 ISNUMERIC()과 ISDATE()를 보완하는 ISUNIQUEIDENTIFIER()가 없습니다. SQL Server 2012에서는 하위 테이블에 마지막 테이블 구조체를 래핑하고 TRY_CONVERT()를 사용할 수 있습니다. 최신 XML 방법 중 하나를 사용 해본 적이 있습니까? 솔직히 말해 OPENXML이 여전히 효과가 있다는 것에 놀랐습니다. :-) –