XML 데이터 로드

적용 대상:SQL ServerAzure SQL Database

XML 데이터를 여러 가지 방법으로 SQL Server로 전송할 수 있습니다. 예:

  • SQL Server 데이터베이스의 [n]텍스트 또는 이미지 열에 데이터가 있는 경우 Integration Services를 사용하여 테이블을 가져올 수 있습니다. ALTER TABLE 문을 사용하여 열 유형을 XML로 바꿉니다.

  • bcp out을 사용하여 다른 SQL Server 데이터베이스에서 데이터를 대량 복사한 다음 bcp in을 사용하여 데이터를 이후 버전 데이터베이스에 대량으로 삽입할 수 있습니다.

  • SQL Server 데이터베이스의 관계형 열에 데이터가 있는 경우 [n]텍스트 열과 행 식별자에 대한 기본 키 열이 있는 새 테이블을 만듭니다. 클라이언트 쪽 프로그래밍을 사용하여 FOR XML을 사용하여 서버에서 생성된 XML을 검색하고 [n] 텍스트 열에 씁니다. 그런 다음, 앞에서 언급한 기술을 사용하여 데이터를 이후 버전 데이터베이스로 전송합니다. 최신 데이터베이스에 있는 XML 열로 XML을 직접 작성하도록 선택할 수 있습니다.

XML 데이터 대량 로드

bcp와 같은 SQL Server의 대량 로드 기능을 사용하여 XML 데이터를 서버로 대량 로드할 수 있습니다. OPENROWSET을 사용하면 데이터를 파일에서 XML 열로 로드할 수 있습니다. 다음 예제에서는 이 항목을 보여줍니다.

예: 파일에서 XML 로드

이 예제에서는 T 테이블에 행을 삽입하는 방법을 보여줍니다. XML 열의 값은 파일 C:\MyFile\xmlfile.xml 에서 CLOB로 로드되고 정수 열에는 값 10이 제공됩니다.

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_BLOB)
AS xCol) AS R(xCol);

텍스트 인코딩

SQL Server는 XML 데이터를 유니코드(UTF-16)에 저장합니다. 서버에서 검색된 XML 데이터는 UTF-16 인코딩으로 출력됩니다. 다른 인코딩이 필요한 경우 검색된 데이터에서 필요한 변환을 수행해야 합니다. 일부 경우 XML 데이터는 다른 인코딩으로 표시될 수 있습니다. 이 경우 데이터를 로드하는 동안 주의해야 합니다. 예:

  • 텍스트 XML이 유니코드(UCS-2, UTF-16)인 경우 아무 문제 없이 XML 열, 변수 또는 매개 변수에 할당할 수 있습니다.

  • 인코딩이 유니코드가 아니고 암시적이면 소스 코드 페이지 때문에 데이터베이스의 문자열 코드 페이지가 로드하려는 코드 포인트와 동일하거나 호환되어야 합니다. 필요한 경우 COLLATE를 사용합니다. 이러한 서버 코드 페이지가 없는 경우 올바른 인코딩을 사용하여 명시적 XML 선언을 추가해야 합니다.

  • 명시적 인코딩을 사용하려면 코드 페이지와 상호 작용하지 않는 varbinary() 형식을 사용하거나 적절한 코드 페이지의 문자열 형식을 사용합니다. 그런 다음 XML 열, 변수 또는 매개 변수에 데이터를 할당합니다.

예: 인코딩을 명시적으로 지정합니다.

명시적 XML 선언이 없는 varchar(max)저장된 XML 문서 vcdoc가 있다고 가정합니다. 다음 문은 인코딩 "iso8859-1"이 있는 XML 선언을 추가하고, XML 문서를 연결하고, 결과를 varbinary(max) 로 캐스팅하여 바이트 표현이 유지되도록 한 다음, 마지막으로 XML로 캐스팅합니다. 이렇게 하면 XML 프로세서가 지정된 인코딩 "iso8859-1"에 따라 데이터를 구문 분석하고 문자열 값에 해당하는 UTF-16 표현을 생성할 수 있습니다.

SELECT CAST(
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))
AS XML);

문자열 인코딩 비호환성

XML을 SQL Server Management Studio의 쿼리 편집기 창에 문자열 리터럴로 복사하여 붙여넣으면 [n]varchar 문자열 인코딩이 비호환적일 수 있습니다. 이것은 해당 XML 인스턴스의 인코딩에 따라 달라집니다. 대부분의 경우 XML 선언을 제거할 수 있습니다. 예:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema ...

그런 다음 XML 인스턴스를 유니코드 인스턴스로 N 만들려면 문자열 앞에 접두사를 지정해야 합니다. 예:

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'...'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'...')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema ... '

참고 항목