SQL Server Native Client의 스파스 열 지원
SQL Server Native Client 스파스 열을 지원합니다. SQL Server의 스파스 열에 대한 자세한 내용은 스파스 열 사용 및 열 집합 사용을 참조하세요.
SQL Server Native Client 스파스 열 지원에 대한 자세한 내용은 ODBC(스파스 열 지원) 및 스파스 열 지원(OLE DB)을 참조하세요.
이 기능을 보여 주는 예제 애플리케이션에 대한 자세한 내용은 SQL Server 데이터 프로그래밍 예제를 참조하십시오.
스파스 열 및 SQL Server Native Client에 대한 사용자 시나리오
다음 표에서는 스파스 열이 있는 SQL Server Native Client 사용자의 일반적인 사용자 시나리오를 요약합니다.
시나리오 | 동작 |
---|---|
select * from table 또는 IOpenRowset::OpenRowset. | 스파스 column_set 의 멤버가 아닌 모든 열과 스파스 column_set 의 null이 아닌 모든 열의 값이 포함된 XML 열을 반환합니다. |
이름으로 열 참조 | 열이 스파스 열인지 또는 column_set 의 멤버인지 여부에 관계없이 열을 참조할 수 있습니다. |
XML 계산 열을 통해 column_set 멤버 열에 액세스 |
이름으로 column_set 을 선택하여 스파스 column_set 의 멤버인 열에 액세스할 수 있고 column_set 열의 XML을 업데이트하여 값을 삽입하고 업데이트할 수 있습니다.값은 column_set 열에 대한 스키마를 따라야 합니다. |
열 검색 패턴이 NULL 또는 '%'(ODBC)인 SQLColumns를 통해 테이블의 모든 열에 대한 메타데이터를 검색합니다. 또는 열 제한이 없는 DBSCHEMA_COLUMNS 스키마 행 집합을 통해(OLE DB) | column_set 의 멤버가 아닌 모든 열에 대해 한 개의 행을 반환합니다. 테이블에 스파스 column_set 이 있으면 이에 대해 한 개의 행이 반환됩니다.column_set 의 멤버인 열에 대해서는 메타데이터를 반환하지 않습니다. |
열이 스파스 열인지 또는 column_set 의 멤버인지 여부에 관계없이 모든 열의 메타데이터 검색. 이 경우 많은 수의 행이 반환될 수 있습니다. |
설명자 필드 SQL_SOPT_SS_NAME_SCOPE SQL_SS_NAME_SCOPE_EXTENDED 설정하고 SQLColumns (ODBC)를 호출합니다. DBSCHEMA_COLUMNS_EXTENDED 스키마 행 집합(OLE DB)에 대해 IDBSchemaRowset::GetRowset을 호출합니다. 이 시나리오는 2008년 SQL Server 이전 릴리스의 SQL Server Native Client 사용하는 애플리케이션에서는 불가능합니다. 하지만 이러한 응용 프로그램은 시스템 뷰를 직접 쿼리할 수 있습니다. |
column_set 의 멤버인 열에 대해서만 메타데이터 검색. 이 경우 많은 수의 행이 반환될 수 있습니다. |
설명자 필드 SQL_SOPT_SS_NAME_SCOPE SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET 설정하고 ODBC(SQLColumns)를 호출합니다. DBSCHEMA_SPARSE_COLUMN_SET 스키마 행 집합(OLE DB)에 대해 IDBSchemaRowset::GetRowset을 호출합니다. 이 시나리오는 2008년 SQL Server 이전 릴리스의 SQL Server Native Client 사용하는 애플리케이션에서는 불가능합니다. 하지만 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
열이 스파스 열인지 여부 확인 | SQLColumns 결과 집합(ODBC)의 SS_IS_SPARSE 열을 참조하세요. DBSCHEMA_COLUMNS 스키마 행 집합의 SS_IS_SPARSE 열을 확인합니다(OLE DB). 이 시나리오는 2008년 SQL Server 이전 릴리스의 SQL Server Native Client 사용하는 애플리케이션에서는 불가능합니다. 하지만 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
열이 column_set 인지 확인 |
SQLColumns 결과 집합의 SS_IS_COLUMN_SET 열을 참조하세요. 또는 SQL Server 특정 열 특성 SQL_CA_SS_IS_COLUMN_SET(ODBC)를 참조하세요. DBSCHEMA_COLUMNS 스키마 행 집합의 SS_IS_COLUMN_SET 열을 확인합니다. 또는 IColumnsRowset::GetColumnsRowset에서 반환된 행 집합에서 IColumnsinfo::GetColumnInfo 또는 DBCOLUMNFLAGS에 의해 반환된 dwFlags를 참조합니다. column_set 열의 경우 DBCOLUMNFLAGS_SS_ISCOLUMNSET이 설정됩니다(OLE DB).이 시나리오는 2008년 SQL Server 이전 릴리스의 SQL Server Native Client 사용하는 애플리케이션에서는 불가능합니다. 하지만 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
column_set 이 없는 테이블에 대해 BCP를 사용하여 스파스 열 가져오기 및 내보내기 |
이전 버전의 SQL Server Native Client 동작은 변경되지 않습니다. |
column_set 이 있는 테이블에 대해 BCP를 사용하여 스파스 열 가져오기 및 내보내기 |
는 column_set XML과 동일한 방식으로 가져오고 내보냅니다. 즉, varbinary(max) 이진 형식으로 바인딩되거나 또는 wchar 형식으로 char 바인딩된 것처럼 nvarchar(max) 표시됩니다.스파스 column_set 의 멤버인 열은 별개의 열로 내보내지 않습니다. 이러한 열은 column_set 의 값으로만 내보냅니다. |
BCP에 대한 queryout 동작 |
이전 버전의 SQL Server Native Client 명시적으로 명명된 열의 처리는 변경되지 않습니다. 스키마가 서로 다른 테이블 간의 가져오기 및 내보내기가 포함된 시나리오의 경우 특수 처리가 필요할 수도 있습니다. BCP에 대한 자세한 내용은 이 항목의 뒤에 나오는 스파스 열에 대한 BCP(대량 복사) 지원을 참조하십시오. |
하위 수준 클라이언트 동작
하위 수준 클라이언트는 SQLColumns 및 DBSCHMA_COLUMNS 스파스의 column_set
멤버가 아닌 열에 대해서만 메타데이터를 반환합니다. SQL Server 2008 Native Client에 도입된 추가 OLE DB 스키마 행 집합은 사용할 수 없으며 SQL_SOPT_SS_NAME_SCOPE 통해 ODBC의 SQLColumns를 수정할 수도 없습니다.
하위 수준 클라이언트는 이름으로 스파 column_set
스의 멤버인 열에 액세스할 수 있으며 column_set
2005 클라이언트를 SQL Server XML 열로 열에 액세스할 수 있습니다.
스파스 열에 대한 BCP(대량 복사) 지원
스파스 열이나 column_set
기능과 관련해서는 ODBC나 OLE DB의 BCP API에 변경된 사항이 없습니다.
테이블에 column_set
이 있으면 스파스 열이 별개의 열로 처리되지 않습니다. 모든 스파스 열의 값은 XML 열과 동일한 방식으로 내보내지는 값column_set
, 즉 이진 형식으로 varbinary(max)
바인딩되거나 또는 wchar 형식으로 char
바인딩된 것처럼 nvarchar(max)
포함됩니다. 가져오는 경우 column_set
값은 column_set
의 스키마를 따라야 합니다.
queryout
작업의 경우 명시적으로 참조된 열의 처리 방법에는 변경된 사항이 없습니다. column_set
열은 XML 열과 동작이 같고 스파스 열인지 여부는 명명된 스파스 열의 처리에 어떠한 영향도 주지 않습니다.
그러나 내보내기 작업에 queryout
을 사용하고 스파스 열 집합의 멤버인 스파스 열을 이름으로 참조하는 경우 구조가 비슷한 테이블에는 직접 내보낼 수 없습니다. BCP는 가져오기에 대해 select * 작업과 일치하는 메타데이터를 사용하고 멤버 열을 이 메타데이터와 일치시킬 column_set
수 없기 때문입니다. column_set
멤버 열을 개별적으로 가져오려면 원하는 column_set
열을 참조하는 뷰를 테이블에 정의한 다음 이 뷰를 사용해 가져오기 작업을 수행해야 합니다.