Obsługa kolumn rozrzednych w kliencie natywnym programu SQL Server
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Ważny
klienta natywnego programu SQL Server (SNAC) nie jest dostarczany z:
- SQL Server 2022 (16.x) i nowsze wersje
- SQL Server Management Studio 19 i nowsze wersje
Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.
W przypadku nowych projektów użyj jednego z następujących czynników:
- sterownik Microsoft ODBC dla programu SQL Server
- sterownik Microsoft OLE DB dla programu SQL Server
W przypadku programu SQLNCLI, który jest dostarczany jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), zobacz ten wyjątek cyklu wsparcia .
Klient natywny programu SQL Server obsługuje rozrzedłe kolumny. Aby uzyskać więcej informacji na temat rozrzednych kolumn w programie SQL Server, zobacz Use Sparse Columns and Use Column Sets.
Aby uzyskać więcej informacji na temat obsługi kolumn rozrzednia w kliencie natywnym programu SQL Server, zobacz Obsługa kolumn rozrzednych (ODBC) i obsługa kolumn rozrzednych (OLE DB).
Scenariusze użytkownika dla kolumn rozrzednych i klienta natywnego programu SQL Server
Poniższa tabela zawiera podsumowanie typowych scenariuszy użytkownika dla użytkowników programu SQL Server Native Client z rozrzednymi kolumnami:
Scenariusz | Zachowanie |
---|---|
wybrać * z tabeli lub IOpenRowset::OpenRowset. | Zwraca wszystkie kolumny, które nie należą do rozrzednych column_set, oraz kolumnę XML zawierającą wartości wszystkich kolumn innych niż null, które są elementami członkowskimi rozrzednych column_set. |
Odwołuj się do kolumny według nazwy. | Do kolumny można odwoływać się niezależnie od stanu rozrzedzonych kolumn lub column_set członkostwa. |
Uzyskiwanie dostępu do kolumn column_set składowych za pośrednictwem obliczonej kolumny XML. | Dostęp do kolumn będących elementami członkowskimi rozrzedzonego column_set można uzyskać, wybierając column_set według nazwy i mogą zawierać wartości wstawione i aktualizowane przez zaktualizowanie kodu XML w kolumnie column_set. Wartość musi być zgodna ze schematem dla kolumn column_set. |
Pobieranie metadanych dla wszystkich kolumn w tabeli za pomocą funkcji SQLColumns ze wzorcem wyszukiwania kolumn null lub "%" (ODBC); lub za pośrednictwem zestawu wierszy schematu DBSCHEMA_COLUMNS bez ograniczeń kolumn (OLE DB). | Zwraca wiersz dla wszystkich kolumn, które nie są elementami członkowskimi column_set. Jeśli tabela ma rozrzedzone column_set, zostanie zwrócony wiersz. Należy pamiętać, że nie zwraca to metadanych dla kolumn, które są elementami członkowskimi column_set. |
Pobierz metadane dla wszystkich kolumn niezależnie od rozrzedu lub członkostwa w column_set. Może to zwrócić bardzo dużą liczbę wierszy. | Ustaw SQL_SOPT_SS_NAME_SCOPE pola deskryptora na SQL_SS_NAME_SCOPE_EXTENDED i wywołaj SQLColumns (ODBC). Wywołaj zestaw wierszy schematu IDBSchemaRowset::GetRowset dla zestawu wierszy schematu DBSCHEMA_COLUMNS_EXTENDED (OLE DB). Ten scenariusz nie jest możliwy z poziomu aplikacji korzystającej z natywnego klienta programu SQL Server z wersji starszej niż SQL Server 2008 (10.0.x). Jednak taka aplikacja może wysyłać zapytania bezpośrednio do widoków systemowych. |
Pobierz metadane tylko dla kolumn, które są elementami członkowskimi column_set. Może to zwrócić bardzo dużą liczbę wierszy. | Ustaw SQL_SOPT_SS_NAME_SCOPE pola deskryptora na SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET i wywołaj funkcję SQLColumns (ODBC). Wywołaj zestaw wierszy schematu IDBSchemaRowset::GetRowset dla zestawu wierszy schematu DBSCHEMA_SPARSE_COLUMN_SET (OLE DB). Ten scenariusz nie jest możliwy z poziomu aplikacji korzystającej z natywnego klienta programu SQL Server z wersji starszej niż SQL Server 2008 (10.0.x). Jednak taka aplikacja może wykonywać zapytania dotyczące widoków systemowych. |
Ustal, czy kolumna jest rozrzedona. | Zapoznaj się z kolumną SS_IS_SPARSE zestawu wyników SQLColumns (ODBC). Zapoznaj się z kolumną SS_IS_SPARSE zestawu wierszy schematu DBSCHEMA_COLUMNS (OLE DB). Ten scenariusz nie jest możliwy z poziomu aplikacji korzystającej z natywnego klienta programu SQL Server z wersji starszej niż SQL Server 2008 (10.0.x). Jednak taka aplikacja może wykonywać zapytania dotyczące widoków systemowych. |
Ustal, czy kolumna jest column_set. | Zapoznaj się z kolumną SS_IS_COLUMN_SET zestawu wyników SQLColumns. Możesz też zapoznać się z atrybutem kolumny specyficznym dla programu SQL Server SQL_CA_SS_IS_COLUMN_SET (ODBC). Zapoznaj się z kolumną SS_IS_COLUMN_SET zestawu wierszy schematu DBSCHEMA_COLUMNS. Możesz też zapoznać się z dwFlags zwrócone przez IColumnsinfo::GetColumnInfo lub DBCOLUMNFLAGS w zestawie wierszy zwróconym przez IColumnsRowset::GetColumnsRowset. W przypadku kolumn column_set zostanie ustawiona DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB). Ten scenariusz nie jest możliwy z poziomu aplikacji korzystającej z natywnego klienta programu SQL Server z wersji starszej niż SQL Server 2008 (10.0.x). Jednak taka aplikacja może wykonywać zapytania dotyczące widoków systemowych. |
Importowanie i eksportowanie rozrzedżonych kolumn według narzędzia BCP dla tabeli bez column_set. | Brak zmian w zachowaniu z poprzednich wersji programu SQL Server Native Client. |
Importowanie i eksportowanie rozrzedżonych kolumn według narzędzia BCP dla tabeli z column_set. |
column_set jest importowany i eksportowany w taki sam sposób jak xml; oznacza to, że varbinary(max), jeśli jest powiązany jako typ binarny, lub jako nvarchar(max), jeśli jest powiązany jako char lub wchar typ. Kolumny, które są członkami rozrzedżonych column_set, nie są eksportowane jako odrębne kolumny; są eksportowane tylko w wartości column_set. |
zachowanie zapytań dla programu BCP. | Brak zmian w obsłudze jawnie nazwanych kolumn z poprzednich wersji programu SQL Server Native Client. Scenariusze obejmujące importowanie i eksportowanie między tabelami z różnymi schematami mogą wymagać specjalnej obsługi. Aby uzyskać więcej informacji na temat narzędzia BCP, zobacz Obsługa kopiowania zbiorczego (BCP) dla kolumn rozrzednych w dalszej części tego tematu. |
zachowanie klienta Down-Level
Klienci na poziomie podrzędnym będą zwracać metadane tylko dla kolumn, które nie są elementami członkowskimi rozrzednych column_set dla kolumn SQLColumns i DBSCHEMA_COLUMNS. Dodatkowe zestawy wierszy schematu OLE DB wprowadzone w programie SQL Server 2008 (10.0.x) Native Client nie będą dostępne ani modyfikacje funkcji SQLColumns w odBC za pośrednictwem SQL_SOPT_SS_NAME_SCOPE.
Klienci na poziomie podrzędnym mogą uzyskiwać dostęp do kolumn, które są elementami członkowskimi rozrzedzielonego column_set według nazwy, a kolumna column_set będzie dostępna jako kolumna XML dla klientów programu SQL Server 2005 (9.x).
Obsługa kopiowania zbiorczego (BCP) dla kolumn rozrzednych
Nie ma żadnych zmian w interfejsie API BCP w odBC lub OLE DB dla rozrzednych kolumn lub funkcji column_set.
Jeśli tabela ma column_set, kolumny rozrzedzonych nie są obsługiwane jako odrębne kolumny. Wartości wszystkich rozrzedżonych kolumn są uwzględniane w wartości column_set, która jest eksportowana w taki sam sposób jak kolumna XML; oznacza to, że varbinary(max), jeśli jest powiązana jako typ binarny, lub jako nvarchar(max), jeśli jest powiązana jako char lub wchar typ). Podczas importowania wartość column_set musi być zgodna ze schematem column_set.
W przypadku operacji zapytań nie ma żadnych zmian w sposobie obsługi jawnie przywoływanych kolumn. column_set kolumny mają takie samo zachowanie jak kolumny XML i rozrzedzania nie ma wpływu na obsługę nazwanych kolumn rozrzedzania.
Jeśli jednak zapytania są używane do eksportu i odwołujesz się do rozrzedżonych kolumn, które są elementami członkowskimi rozrzedzona kolumna ustawiona według nazwy, nie można wykonać bezpośredniego importu do podobnie ustrukturyzowanej tabeli. Dzieje się tak, ponieważ program BCP używa metadanych spójnych z operacji select * dla importu i nie jest w stanie dopasować kolumn column_set składowych z tym metadanymi. Aby zaimportować kolumny column_set składowych indywidualnie, należy zdefiniować widok w tabeli odwołującej się do żądanych kolumn column_set i należy wykonać operację importowania przy użyciu widoku.