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