SQL Server Native Client에서 스파스 열 지원
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
Important
SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.
- SQL Server 2022(16.x) 이상 버전
- SQL Server Management Studio 19 이상 버전
SQL Server Native Client(SQLNCLI 또는 SQLNCLI11)와 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새로운 응용 프로그램 개발에 권장되지 않습니다.
새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.
SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.
SQL Server Native Client는 스파스 열을 지원합니다. SQL Server의 스파스 열에 대한 자세한 내용은 스파스 열 사용 및 열 집합 사용을 참조하세요.
SQL Server Native Client 의 스파스 열 지원에 대한 자세한 내용은 ODBC(스파스 열 지원) 및 스파스 열 지원(OLE DB)을 참조하세요.
스파스 열 및 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 설정하고 ODBC(SQLColumns)를 호출 합니다 . OLE DB(DBSCHEMA_COLUMNS_EXTENDED 스키마 행 집합)에 대해 IDBSchemaRowset::GetRowset을 호출합니다. 이 시나리오는 SQL Server 2008(10.0.x) 이전 릴리스에서 SQL Server Native Client를 사용하는 애플리케이션에서는 불가능합니다. 그러나 이러한 애플리케이션은 시스템 뷰를 직접 쿼리할 수 있습니다. |
column_set 멤버인 열에 대해서만 메타데이터를 검색합니다. 이 경우 많은 수의 행이 반환될 수 있습니다. | 설명자 필드 SQL_SOPT_SS_NAME_SCOPE 설정하여 SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET SQLColumns(ODBC)를 호출합니다. OLE DB(DBSCHEMA_SPARSE_COLUMN_SET 스키마 행 집합)에 대해 IDBSchemaRowset::GetRowset을 호출합니다. 이 시나리오는 SQL Server 2008(10.0.x) 이전 릴리스에서 SQL Server Native Client를 사용하는 애플리케이션에서는 불가능합니다. 그러나 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
열이 스파스인지 여부를 확인합니다. | ODBC(SQLColumns 결과 집합)의 SS_IS_SPARSE 열을 참조하세요. DBSCHEMA_COLUMNS 스키마 행 집합(OLE DB)의 SS_IS_SPARSE 열을 참조하세요. 이 시나리오는 SQL Server 2008(10.0.x) 이전 릴리스에서 SQL Server Native Client를 사용하는 애플리케이션에서는 불가능합니다. 그러나 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
열이 column_set 있는지 확인합니다. | SQLColumns 결과 집합의 SS_IS_COLUMN_SET 열을 참조하세요. 또는 ODBC(SQL Server 특정 열 특성 SQL_CA_SS_IS_COLUMN_SET)를 참조하세요. DBSCHEMA_COLUMNS 스키마 행 집합의 SS_IS_COLUMN_SET 열을 참조하세요. 또는 IColumnsRowset::GetColumnsRowset에서 반환된 행 집합에서 IColumnsinfo::GetColumnInfo 또는 DBCOLUMNFLAGS에서 반환된 dwFlags를 참조하세요. column_set 열의 경우 DBCOLUMNFLAGS_SS_ISCOLUMNSET 설정됩니다(OLE DB). 이 시나리오는 SQL Server 2008(10.0.x) 이전 릴리스에서 SQL Server Native Client를 사용하는 애플리케이션에서는 불가능합니다. 그러나 이러한 애플리케이션은 시스템 뷰를 쿼리할 수 있습니다. |
column_set이 없는 테이블에 대해 BCP를 사용하여 스파스 열 가져오기 및 내보내기. | 이전 버전의 SQL Server Native Client의 동작은 변경되지 않습니다. |
column_set 있는 테이블에 대해 BCP에서 스파스 열을 가져오고 내보냅니다. | column_set XML과 동일한 방식으로 가져오고 내보냅니다. 즉, 이진 형식으로 바인딩된 경우 varbinary(max) 또는 char 또는 wchar 형식으로 바인딩된 경우 nvarchar(max)로 내보냅니다. 스파스 column_set 멤버인 열은 고유 열로 내보내지지 않으며 column_set 값으로만 내보냅니다. |
BCP에 대한 쿼리 아웃 동작입니다. | 이전 버전의 SQL Server Native Client에서 명시적으로 명명된 열의 처리는 변경되지 않습니다. 스키마가 다른 테이블 간의 가져오기 및 내보내기와 관련된 시나리오에는 특별한 처리가 필요할 수 있습니다. BCP에 대한 자세한 내용은 이 항목의 뒷부분에 있는 스파스 열에 대한 BCP(대량 복사) 지원을 참조하세요. |
하위 수준 클라이언트 동작
하위 수준 클라이언트는 SQLColumns 및 DBSCHMA_COLUMNS 대한 스파스 column_set 멤버가 아닌 열에 대해서만 메타데이터를 반환합니다. SQL Server 2008(10.0.x) Native Client에 도입된 추가 OLE DB 스키마 행 집합은 사용할 수 없으며 SQL_SOPT_SS_NAME_SCOPE 통해 ODBC의 SQLColumns를 수정할 수도 없습니다.
하위 수준 클라이언트는 이름으로 스파스 column_set 멤버인 열에 액세스할 수 있으며 , column_set 열은 SQL Server 2005(9.x) 클라이언트에 대한 XML 열로 액세스할 수 있습니다.
스파스 열에 대한 BCP(대량 복사) 지원
스파스 열 또는 column_set 기능에 대한 ODBC 또는 OLE DB의 BCP API는 변경되지 않습니다.
테이블에 column_set 있는 경우 스파스 열은 고유 열로 처리되지 않습니다. 모든 스파스 열의 값은 XML 열과 동일한 방식으로 내보내지는 column_set 값에 포함됩니다. 즉, 이진 형식으로 바인딩된 경우 varbinary(max)로, 또는 char 또는 wchar 형식으로 바인딩된 경우 nvarchar(max)로 포함됩니다. 가져올 때 column_set 값은 column_set 스키마를 준수해야 합니다.
쿼리 아웃 작업의 경우 명시적으로 참조된 열이 처리되는 방식은 변경되지 않습니다. column_set 열은 XML 열과 동일한 동작을 가지며 스파스는 명명된 스파스 열의 처리에 영향을 주지 않습니다.
그러나 쿼리 아웃이 내보내기에 사용되고 이름으로 설정된 스파스 열의 멤버인 스파스 열을 참조하는 경우 유사하게 구조화된 테이블로 직접 가져올 수 없습니다. 이는 BCP가 가져오기 작업에서 select * 작업과 일치하는 메타데이터를 사용하는데 column_set 멤버 열을 이 메타데이터와 일치시킬 수 없기 때문입니다. column_set 멤버 열을 개별적으로 가져오려면 원하는 column_set 열을 참조하는 뷰를 테이블에 정의해야 하며 뷰를 사용하여 가져오기 작업을 수행해야 합니다.