Unterstützung für Spalten mit geringer Dichte in SQL Server Native Client
SQL Server Native Client unterstützt Spalten mit geringer Dichte. Weitere Informationen über Spalten mit geringer Dichte in SQL Server finden Sie unter Verwenden von Spalten mit geringer Dichte und Verwenden von Spaltensätzen.
Weitere Informationen über die Unterstützung für Spalten mit geringer Dichte in SQL Server Native Client finden Sie unter Unterstützung für Spalten mit geringer Dichte (ODBC) und Unterstützung für Spalten mit geringer Dichte (OLE DB).
Informationen zu Beispielanwendungen, die diese Funktion veranschaulichen, finden Sie unter Programmierbeispiele für SQL Server-Daten.
Benutzerszenarien für Spalten mit geringer Dichte und SQL Server Native Client
In der folgenden Tabelle sind die gängigen Benutzerszenarien für SQL Server Native Client-Benutzer mit Spalten mit geringer Dichte zusammengefasst:
Szenario |
Verhalten |
---|---|
select * from table oder IOpenRowset::OpenRowset |
Gibt alle Spalten, die keine Elemente des column_set mit geringer Dichte sind, sowie eine XML-Spalte zurück, die die Werte aller Nicht-NULL-Spalten enthält, die Elemente des column_set mit geringer Dichte sind. |
Verweisen auf eine Spalte über den Namen |
Auf die Spalte kann unabhängig von ihrem Status als Spalte mit geringer Dichte oder ihrer column_set-Zugehörigkeit verwiesen werden. |
Zugreifen auf column_set-Elementspalten über eine berechnete XML-Spalte |
Auf Spalten, die Elemente des column_set mit geringer Dichte sind, kann zugegriffen werden, indem Sie den column_set über den Namen auswählen und Werte durch Aktualisieren des XML-Codes in der column_set-Spalte 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 einem Spaltensuchmuster NULL oder % (ODBC) oder über das DBSCHEMA_COLUMNS-Schemarowset ohne Spaltenbeschränkung (OLE DB) |
Gibt eine Zeile für alle Spalten zurück, die nicht Elemente eines column_set sind. Wenn die Tabelle einen column_set mit geringer Dichte 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 in einer Anwendung, die SQL Server Native Client einer früheren Version als SQL Server 2008 verwendet, nicht möglich. 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 fest, und rufen Sie SQLColumns (ODBC) auf. Rufen Sie IDBSchemaRowset::GetRowset für das DBSCHEMA_SPARSE_COLUMN_SET-Schemarowset (OLE DB) auf. Dieses Szenario ist in einer Anwendung, die SQL Server Native Client einer früheren Version als SQL Server 2008 verwendet, nicht möglich. Eine solche Anwendung könnte jedoch Systemsichten abfragen. |
Bestimmen, ob eine Spalte eine geringe Dichte aufweist |
Sehen Sie sich die SS_IS_SPARSE-Spalte des SQLColumns-Resultsets (ODBC) an. Betrachten Sie die SS_IS_SPARSE-Spalte des DBSCHEMA_COLUMNS-Schemarowsets (OLE DB). Dieses Szenario ist in einer Anwendung, die SQL Server Native Client einer früheren Version als SQL Server 2008 verwendet, nicht möglich. Eine solche Anwendung könnte jedoch Systemsichten abfragen. |
Bestimmen, ob eine Spalte ein column_set ist |
Betrachten Sie die SS_IS_COLUMN_SET-Spalte des SQLColumns-Resultsets. Oder sehen Sie sich das SQL Server-spezifische SQL_CA_SS_IS_COLUMN_SET-Spaltenattribut (ODBC) an. Betrachten Sie die SS_IS_COLUMN_SET-Spalte des DBSCHEMA_COLUMNS-Schemarowsets. Oder betrachten Sie die von IColumnsinfo::GetColumnInfo zurückgegebenen dwFlags oder DBCOLUMNFLAGS im von IColumnsRowset::GetColumnsRowset zurückgegebenen Rowset. Für column_set-Spalten wird DBCOLUMNFLAGS_SS_ISCOLUMNSET festgelegt (OLE DB). Dieses Szenario ist in einer Anwendung, die SQL Server Native Client einer früheren Version als SQL Server 2008 verwendet, nicht möglich. Eine solche Anwendung könnte jedoch Systemsichten abfragen. |
Importieren und Exportieren von Spalten mit geringer Dichte über BCP für eine Tabelle ohne column_set |
Keine Änderung im Verhalten im Vergleich zu vorherigen Versionen von SQL Server Native Client. |
Importieren und Exportieren von Spalten mit geringer Dichte über BCP für eine Tabelle mit einem column_set |
Der column_set wird auf dieselbe Art und Weise wie XML-Code importiert und exportiert, 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. Spalten, die Elemente des column_set mit geringer Dichte 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 Behandlung explizit benannter Spalten im Vergleich zu vorherigen 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 des column_set mit geringer Dichte für SQLColumns und DBSCHMA_COLUMNS sind. Das in SQL Server 2008 Native Client eingeführte zusätzliche OLE DB-Schemarowset ist nicht verfügbar. Auch die Änderungen an SQLColumns in ODBC über SQL_SOPT_SS_NAME_SCOPE sind nicht verfügbar.
Downlevelclients können über den Namen auf Spalten zugreifen, die Elemente des column_set mit geringer Dichte sind. Auf die column_set-Spalte kann als XML-Spalte für SQL Server 2005-Clients zugegriffen werden.
Massenkopierunterstützung (BCP) für Spalten mit geringer Dichte
Es sind weder in ODBC noch in OLE DB Änderungen an der BCP-API für die Spalten mit geringer Dichte oder column_set-Funktionen vorgenommen worden.
Wenn eine Tabelle einen column_set aufweist, werden Spalten mit geringer Dichte nicht als unterschiedliche Spalten behandelt. Die Werte aller Spalten mit geringer Dichte 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 geringe Dichte hat keine Auswirkungen auf die Behandlung von benannten Spalten mit geringer Dichte.
Wenn jedoch queryout für das Exportieren verwendet wird und Sie über den Namen auf Spalten mit geringer Dichte verweisen, die Elemente des Spaltensatzes mit geringer Dichte sind, können Sie keinen direkten Import in eine Spalte mit gleicher Struktur durchführen. Dies liegt daran, dass BCP Metadaten verwendet, die konsistent mit einem select *-Vorgang für den Import sind, und column_set-Elementspalten diesen Metadaten nicht zuordnen kann. Um column_set-Elementspalten einzeln zu importieren, müssen Sie eine Sicht für die Tabelle definieren, die auf die gewünschten column_set-Spalten verweist. Und Sie müssen den Importvorgang mithilfe der Sicht ausführen.