Unterstützung für Spalten mit geringer Dichte in SQL Server Native Client

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Wichtig

Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, das als Komponente von SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Supportlebenszyklus-Ausnahme.

SQL Server Native Client unterstützt Sparsespalten. Weitere Informationen zu Sparsespalten in SQL Server finden Sie unter Verwenden von Spalten mit geringer Dichte und Verwenden von Spaltensätzen.

Weitere Informationen zur Unterstützung von Sparsespalten in SQL Server Native Client finden Sie unter Unterstützung von Sparsespalten (ODBC) und Unterstützung von Sparsespalten (OLE DB).

Benutzerszenarien für Spalten mit geringer Dichte und SQL Server Native Client

In der folgenden Tabelle sind die allgemeinen Benutzerszenarien für SQL Server Native Client Benutzer mit Sparsespalten zusammengefasst:

Szenario Verhalten
select * from table oder IOpenRowset::OpenRowset. Gibt alle Spalten, die keine Elemente der Sparsespalte column_set sind, sowie eine XML-Spalte zurück, die die Werte aller Spalten ungleich NULL enthält, die Elemente der Sparsespalte column_set sind.
Verweisen auf eine Spalte über den Namen Auf die Spalte kann unabhängig von ihrem Status als Sparsespalte oder ihrer column_set-Zugehörigkeit verwiesen werden.
Zugreifen auf column_set-Elementspalten über eine berechnete XML-Spalte. Auf Spalten, die Elemente der Sparsespalte column_set sind, kann zugegriffen werden, indem Sie den column_set über den Namen auswählen und Werte durch Aktualisieren des XML-Codes in der Spalte column_set einfügen und aktualisieren.

Der Wert muss dem Schema für column_set-Spalten entsprechen.
Abrufen von Metadaten für alle Spalten in einer Tabelle über SQLColumns mit dem Spaltensuchmuster NULL oder %(ODBC); oder über das DBSCHEMA_COLUMNS Schemarowset ohne Spalteneinschränkung (OLE DB). Gibt eine Zeile für alle Spalten zurück, die nicht Elemente eines column_set sind. Wenn die Tabelle eine Sparsespalte column_set aufweist, wird eine Zeile dafür zurückgegeben.

Beachten Sie, dass hier keine Metadaten für Spalten zurückgegeben werden, die Elemente eines column_set sind.
Abrufen von Metadaten für alle Spalten, unabhängig von geringer Dichte oder Zugehörigkeit in einem column_set. Hier könnte eine sehr große Anzahl an Zeilen zurückgegeben werden. Legen Sie das Deskriptorfeld SQL_SOPT_SS_NAME_SCOPE auf SQL_SS_NAME_SCOPE_EXTENDED fest, und rufen Sie SQLColumns (ODBC) auf.

Rufen Sie IDBSchemaRowset::GetRowset für das DBSCHEMA_COLUMNS_EXTENDED Schemarowset (OLE DB) auf.

Dieses Szenario ist mit einer Anwendung nicht möglich, die SQL Server Native Client aus einem Release vor SQL Server 2008 (10.0.x) verwendet. Eine solche Anwendung könnte jedoch Systemsichten direkt abfragen.
Abrufen von Metadaten nur für Spalten, die Elemente eines column_set sind. Hier könnte eine sehr große Anzahl an Zeilen zurückgegeben werden. Legen Sie das Deskriptorfeld SQL_SOPT_SS_NAME_SCOPE auf SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET und Aufrufen von SQLColumns (ODBC) fest.

Rufen Sie IDBSchemaRowset::GetRowset für das DBSCHEMA_SPARSE_COLUMN_SET Schemarowset (OLE DB) auf.

Dieses Szenario ist mit einer Anwendung nicht möglich, die SQL Server Native Client aus einem Release vor SQL Server 2008 (10.0.x) verwendet. Eine solche Anwendung könnte jedoch Systemsichten abfragen.
Bestimmen, ob eine Spalte eine geringe Dichte aufweist Lesen Sie die SS_IS_SPARSE Spalte des SQLColumns-Resultsets (ODBC).

Betrachten Sie die SS_IS_SPARSE-Spalte des DBSCHEMA_COLUMNS-Schemarowsets (OLE DB).

Dieses Szenario ist mit einer Anwendung nicht möglich, die SQL Server Native Client aus einem Release vor SQL Server 2008 (10.0.x) verwendet. Eine solche Anwendung könnte jedoch Systemsichten abfragen.
Bestimmen, ob eine Spalte ein column_set ist. Lesen Sie die SS_IS_COLUMN_SET Spalte des SQLColumns-Resultsets. Oder konsultieren Sie das SQL Server spezifische Spaltenattribute SQL_CA_SS_IS_COLUMN_SET (ODBC).

Betrachten Sie die SS_IS_COLUMN_SET-Spalte des DBSCHEMA_COLUMNS-Schemarowsets. Betrachten Sie alternativ dwFlags, das von IColumnsInfo::GetColumnInfo zurückgegeben wird, oder DBCOLUMNFLAGS in dem von IColumnsRowset::GetColumnsRowset zurückgegebenen Rowset. Für column_set Spalten wird DBCOLUMNFLAGS_SS_ISCOLUMNSET festgelegt (OLE DB).

Dieses Szenario ist mit einer Anwendung nicht möglich, die SQL Server Native Client aus einem Release vor SQL Server 2008 (10.0.x) verwendet. Eine solche Anwendung könnte jedoch Systemsichten abfragen.
Importieren und Exportieren von Sparsespalten über BCP für eine Tabelle ohne column_set. Keine Verhaltensänderung gegenüber früheren Versionen von SQL Server Native Client.
Importieren und Exportieren von Sparsespalten über BCP für eine Tabelle mit einem column_set. Der column_set wird auf die gleiche Weise wie XML importiert und exportiert, d. h. wie varbinary(max) bei Bindung als Binärtyp oder nvarchar(max) bei Bindung als char- oder wchar-Typ.

Spalten, die Elemente der Sparsespalte column_set sind, werden nicht als unterschiedliche Spalten exportiert. Sie werden nur im Wert des column_set exportiert.
queryout-Verhalten für BCP. Keine Änderung in der Verarbeitung explizit benannter Spalten aus früheren Versionen von SQL Server Native Client.

In Szenarien, die das Importieren und Exportieren zwischen Tabellen mit unterschiedlichen Schemas umfassen, ist möglicherweise eine besondere Behandlung erforderlich.

Weitere Informationen über BCP finden Sie unter „Massenkopierunterstützung (BCP) für Spalten mit geringer Dichte” weiter unten in diesem Thema.

Downlevelclient-Verhalten

Downlevelclients geben Metadaten nur für Spalten zurück, die nicht Elemente der Sparsespalte column_set für SQLColumns und DBSCHMA_COLUMNS sind. Die zusätzlichen OLE DB-Schemarowsets, die in SQL Server 2008 (10.0.x) Native Client eingeführt wurden, sind nicht verfügbar, ebenso wenig wie die Änderungen an SQLColumns in ODBC über SQL_SOPT_SS_NAME_SCOPE.

Downlevelclients können auf Spalten, die Elemente der Sparsespalte column_set sind, über den Namen zugreifen. Auf die Spalte column_set kann als XML-Spalte für SQL Server 2005 (9.x)-Clients zugegriffen werden.

Massenkopierunterstützung (BCP) für Spalten mit geringer Dichte

Es gibt keine Änderungen an der BCP-API in ODBC oder OLE DB für die Sparsespalten oder column_set Features.

Wenn eine Tabelle einen column_set aufweist, werden Sparsespalten nicht wie unterschiedliche Spalten behandelt. Die Werte aller Sparsespalten sind im Wert des column_set enthalten, der auf dieselbe Art und Weise wie eine XML-Spalte exportiert wird, d. h. als varbinary(max) , wenn er als Binärtyp gebunden ist, oder als nvarchar(max) , wenn er als char-Typ oder wchar-Typ gebunden ist. Beim Importieren muss der column_set-Wert dem Schema des column_set entsprechen.

Bei queryout-Vorgängen gibt es keine Änderungen in der Behandlung von Spalten, auf die explizit verwiesen wird. column_set-Spalten weisen das gleiche Verhalten auf wie XML-Spalten, und die Sparseeigenschaft hat keine Auswirkungen auf die Behandlung von benannten Sparsespalten.

Wenn jedoch queryout für das Exportieren verwendet wird, und Sie über den Namen auf Sparsespalten verweisen, die Elemente des Sparsespaltensatzes sind, können Sie keinen direkten Import in eine Spalte mit gleicher Struktur durchführen. Dies liegt daran, dass BCP Metadaten verwendet, die mit einem select *-Vorgang für den Import konsistent sind, und column_set-Memberspalten diesen Metadaten nicht zuordnen kann. Damit column_set-Elementspalten einzeln importiert werden können, müssen Sie eine Ansicht für die Tabelle definieren, die auf die gewünschten column_set-Spalten verweist. Darüber hinaus müssen Sie den Importvorgang über die Ansicht ausführen.

Weitere Informationen

Programmierung für SQL Server Native Client