2009-09-14 6 views
1

일반 텍스트 열의 데이터를 xml 열로 변환해야합니다. 그러나 모든 내용이 유효한 XML이 아니므로 잘못된 XML이있는 행을 무시해야합니다. 일종의 인라인 조건부 변환 또는 WHERE 절의 무언가를 사용하여 잘못된 데이터를 필터링 할 수있는 방법이 있습니까?SQL Server : 인라인 조건부 XML로 변환 하시겠습니까?

+0

어떤 버전의 SQL Server입니까? –

+0

SQL 2005 15char –

답변

1

XML 데이터 용으로 ISNUMERIC 버전의 기능이 필요한 것 같습니다.

유감스럽게도 이러한 내장 함수는 존재하지 않는다 - 당신이 당신의 자신의 대안을 고안해야 할 것이다 있도록하는 몇 가지 옵션이 있습니다 :이의 일회성 또는 작은 규모의 과정 인 경우

당신은 닷넷이 마음에 드시면

DECLARE xmlCur CURSOR FOR 
SELECT textcol 
FROM inputTable 

OPEN xmlCur 
DECLARE @string nvarchar(MAX) 
DECLARE @xml xml 

FETCH NEXT FROM xmlCur into @string 

WHILE @@fetch_status = 0 
BEGIN 
    BEGIN TRY 
     SET @xml = CAST(@string AS XML) 
     -- Do something with XML 
    END TRY 
    BEGIN CATCH 
     -- log failure/mark source row as invalid 
    END CATCH 

    FETCH NEXT FROM xmlCur into @string 
END 

CLOSE xmlCur 
DEALLOCATE xmlCur 

을 다른 방법 : 성능은 (검증되지 않은) 유효하지 않은 캐스트를 처리하는 TRY...CATCH 블록을 사용하여 커서 내부에 한 번에 입력 테이블을 하나의 행을 처리 할 수있는, 중요하지 않습니다 프로그래밍 (그리고 서버에서 사용 가능)을 사용하면 CLR을 사용하여 자신의 IsXML 기능을 만들 수 있습니다. .NET 코드는 this thread의 세 번째 게시물보다 훨씬 복잡 할 필요가 있습니다.

CLR 솔루션의 성능이 커서보다 좋지 않을 수 있습니다.이를 확인하려면 테스트해야합니다.

TRY...CATCH 블록 내에서 필드를 XML로 캐스팅하려고하는 스칼라 값의 T-SQL 함수이지만 함수 내에서 TRY...CATCH은 사용할 수 없습니다.

+0

커서 솔루션은 이미 수행 한 작업이므로 기개 : D –