NVARCHAR
을 대상 데이터 유형으로 사용하여 XML에서 데이터를 간단하게 추출 할 수 있으면이 작업을 수행 할 수 있어야합니다.
DECLARE @SourceXML XML = N'
<Test>
<Row>
<Something Collation="Hebrew_100_CI_AS">בליפ</Something>
</Row>
<Row>
<Something Collation="Japanese_XJIS_100_CI_AS">如抜範浪偃壅國</Something>
</Row>
</Test>'; -- the @Collation attribute is not necessary; only there for visual indication
DECLARE @Test TABLE
(
HebrewCollation VARCHAR(20) COLLATE Hebrew_100_CI_AS,
Latin1Collation VARCHAR(20) COLLATE Latin1_General_100_CI_AS,
JapaneseCollation VARCHAR(20) COLLATE Japanese_XJIS_100_CI_AS
);
INSERT INTO @Test ([HebrewCollation], [Latin1Collation], [JapaneseCollation])
SELECT tab.col.value('(./Something/text())[1]', 'NVARCHAR(100)'),
tab.col.value('(./Something/text())[1]', 'NVARCHAR(100)'),
tab.col.value('(./Something/text())[1]', 'NVARCHAR(100)')
FROM @SourceXML.nodes(N'/Test/Row') tab(col);
SELECT *,
DATALENGTH([HebrewCollation]) AS [HebrewColumnBytes],
DATALENGTH([JapaneseCollation]) AS [JapaneseColumnBytes]
FROM @Test;
반환 :
데이터 정렬이 열을 제대로 지정 (그리고 좀 데이터 손실을하지 이미 위해서는이어야한다)하는 경우, 그것은 적절한 코드 페이지로 변환해야합니다
HebrewCollation Latin1Collation JapaneseCollation HebrewColumnBytes JapaneseColumnBytes
בליפ
???? ???? 4 4
??????? ??????? 如抜範浪偃壅國 7 14
결과 행 (1)으로 인해 두 라인에 오른쪽에서 왼쪽으로 VS 왼쪽에서 오른쪽으로 행 1에 대한 4의 값 werbeH ;-)
은 "HebrewColumnBytes"에 의한 표시 문제 히브리어 _ * 데이터 정렬은 단일 바이트 문자 집합 인 코드 페이지 1255를 사용합니다. 마찬가지로 행 2에 대한 14의 "JapaneseColumnBytes"값은 일본어 _ 데이터 정렬이 2 바이트 문자 세트 인 코드 페이지 932를 사용하므로 정확합니다.
나는 레거시 시스템이라고 말했기 때문에 데이터의 저장을 유니 코드. 이것이 전체적인 문제입니다. –
그런 다음 적절한 인코딩으로 데이터를 저장할 수 없습니다. 그것으로 간단합니다. –
충분히 공정한, 나는 아마 그 경우 일 것이라고 생각했다. 건배. –