Dukungan Kolom Jarang di Klien Asli SQL Server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

SQL Server Native Client mendukung kolom jarang. Untuk informasi selengkapnya tentang kolom jarang di SQL Server, lihat Menggunakan Kolom Jarang dan Menggunakan Kumpulan Kolom.

Untuk informasi selengkapnya tentang dukungan kolom jarang di Klien Asli SQL Server, lihat Dukungan Kolom Jarang (ODBC) dan Dukungan Kolom Jarang (OLE DB).

Skenario Pengguna untuk Kolom Jarang dan Klien Asli SQL Server

Tabel berikut ini meringkas skenario pengguna umum untuk pengguna SQL Server Native Client dengan kolom jarang:

Skenario Perilaku
pilih * dari tabel atau IOpenRowset::OpenRowset. Mengembalikan semua kolom yang bukan anggota column_set jarang, ditambah kolom XML yang berisi nilai semua kolom non-null yang merupakan anggota column_set jarang.
Mereferensikan kolom menurut nama. Kolom dapat dirujuk terlepas dari status kolom jarang atau keanggotaan column_set .
Akses column_set kolom anggota melalui kolom XML komputasi. Kolom yang merupakan anggota column_set jarang dapat diakses dengan memilih column_set berdasarkan nama dan bisa memiliki nilai yang disisipkan dan diperbarui dengan memperbarui XML di kolom column_set.

Nilai harus sesuai dengan skema untuk kolom column_set .
Ambil metadata untuk semua kolom dalam tabel melalui SQLColumns dengan pola pencarian kolom NULL atau '%' (ODBC); atau melalui kumpulan baris skema DBSCHEMA_COLUMNS tanpa batasan kolom (OLE DB). Mengembalikan baris untuk semua kolom yang bukan anggota column_set. Jika tabel memiliki column_set jarang, baris akan dikembalikan untuk tabel tersebut.

Perhatikan bahwa ini tidak mengembalikan metadata untuk kolom yang merupakan anggota column_set.
Ambil metadata untuk semua kolom, terlepas dari jarangnya atau keanggotaan dalam column_set. Ini mungkin mengembalikan jumlah baris yang sangat besar. Atur bidang deskriptor SQL_SOPT_SS_NAME_SCOPE ke SQL_SS_NAME_SCOPE_EXTENDED dan panggil SQLColumns (ODBC).

Panggil IDBSchemaRowset::GetRowset untuk kumpulan baris skema DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Skenario ini tidak dimungkinkan dari aplikasi yang menggunakan SQL Server Native Client dari rilis yang lebih awal dari SQL Server 2008 (10.0.x). Namun, aplikasi semacam itu dapat mengkueri tampilan sistem secara langsung.
Ambil metadata hanya untuk kolom yang merupakan anggota column_set. Ini mungkin mengembalikan jumlah baris yang sangat besar. Atur bidang deskriptor SQL_SOPT_SS_NAME_SCOPE ke SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET dan panggil SQLColumns (ODBC).

Panggil IDBSchemaRowset::GetRowset untuk kumpulan baris skema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Skenario ini tidak dimungkinkan dari aplikasi yang menggunakan SQL Server Native Client dari rilis yang lebih awal dari SQL Server 2008 (10.0.x). Namun, aplikasi semacam itu dapat mengkueri tampilan sistem.
Tentukan apakah kolom jarang. Lihat kolom SS_IS_SPARSE kumpulan hasil SQLColumns (ODBC).

Lihat kolom SS_IS_SPARSE dari kumpulan baris skema DBSCHEMA_COLUMNS (OLE DB).

Skenario ini tidak dimungkinkan dari aplikasi yang menggunakan SQL Server Native Client dari rilis yang lebih awal dari SQL Server 2008 (10.0.x). Namun, aplikasi semacam itu dapat mengkueri tampilan sistem.
Tentukan apakah kolom adalah column_set. Lihat kolom SS_IS_COLUMN_SET dari kumpulan hasil SQLColumns. Atau, lihat atribut kolom tertentu SQL Server SQL_CA_SS_IS_COLUMN_SET (ODBC).

Lihat kolom SS_IS_COLUMN_SET dari kumpulan baris skema DBSCHEMA_COLUMNS. Atau, lihat dwFlags yang dikembalikan oleh IColumnsinfo::GetColumnInfo atau DBCOLUMNFLAGS dalam set baris yang dikembalikan oleh IColumnsRowset::GetColumnsRowset. Untuk kolom column_set , DBCOLUMNFLAGS_SS_ISCOLUMNSET akan diatur (OLE DB).

Skenario ini tidak dimungkinkan dari aplikasi yang menggunakan SQL Server Native Client dari rilis yang lebih awal dari SQL Server 2008 (10.0.x). Namun, aplikasi semacam itu dapat mengkueri tampilan sistem.
Impor dan ekspor kolom jarang menurut BCP untuk tabel tanpa column_set. Tidak ada perubahan perilaku dari versi SQL Server Native Client sebelumnya.
Impor dan ekspor kolom jarang menurut BCP untuk tabel dengan column_set. column_set diimpor dan diekspor dengan cara yang sama seperti XML; yaitu, sebagai varbinary(max) jika terikat sebagai jenis biner, atau sebagai nvarchar(max) jika terikat sebagai jenis karakter atau wchar.

Kolom yang merupakan anggota column_set jarang tidak diekspor sebagai kolom yang berbeda; kolom tersebut hanya diekspor dalam nilai column_set.
perilaku kueri keluar untuk BCP. Tidak ada perubahan dalam penanganan kolom bernama secara eksplisit dari versi SQL Server Native Client sebelumnya.

Skenario yang melibatkan impor dan ekspor antar tabel dengan skema yang berbeda mungkin memerlukan penanganan khusus.

Untuk informasi selengkapnya tentang BCP, lihat Dukungan Salinan Massal (BCP) untuk Kolom Sparse, nanti dalam topik ini.

Perilaku Klien Tingkat Bawah

Klien tingkat bawah akan mengembalikan metadata hanya untuk kolom yang bukan anggota column_set jarang untuk SQLColumns dan DBSCHMA_COLUMNS. Kumpulan baris skema OLE DB tambahan yang diperkenalkan di Klien Asli SQL Server 2008 (10.0.x) tidak akan tersedia, juga tidak akan modifikasi pada SQLColumns di ODBC melalui SQL_SOPT_SS_NAME_SCOPE.

Klien tingkat bawah dapat mengakses kolom yang merupakan anggota column_set jarang berdasarkan nama, dan kolom column_set akan dapat diakses sebagai kolom XML ke klien SQL Server 2005 (9.x).

Dukungan Salinan Massal (BCP) untuk Kolom Sparse

Tidak ada perubahan pada API BCP baik di ODBC atau OLE DB untuk kolom jarang atau fitur column_set .

Jika tabel memiliki column_set, kolom jarang tidak ditangani sebagai kolom yang berbeda. Nilai semua kolom jarang disertakan dalam nilai column_set, yang diekspor dengan cara yang sama seperti kolom XML; yaitu, sebagai varbinary(maks) jika terikat sebagai jenis biner, atau sebagai nvarchar(maks) jika terikat sebagai jenis karakter atau wchar ). Saat mengimpor, nilai column_set harus sesuai dengan skema column_set.

Untuk operasi kueri, tidak ada perubahan pada cara kolom yang dirujuk secara eksplisit ditangani. column_set kolom memiliki perilaku yang sama dengan kolom dan jarang XML tidak berpengaruh pada penanganan kolom jarang bernama.

Namun, jika kueri digunakan untuk ekspor dan Anda mereferensikan kolom jarang yang merupakan anggota kolom jarang yang diatur berdasarkan nama, Anda tidak dapat melakukan impor langsung ke dalam tabel terstruktur serupa. Ini karena BCP menggunakan metadata yang konsisten dengan operasi pilih * untuk impor dan tidak dapat mencocokkan kolom anggota column_set dengan metadata ini. Untuk mengimpor kolom anggota column_set satu per satu, Anda harus menentukan tampilan pada tabel yang mereferensikan kolom column_set yang diinginkan, dan Anda harus melakukan operasi impor menggunakan tampilan.

Lihat Juga

Pemrograman Klien Asli SQL Server