Zuordnen von Datentypen (ODBC)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)
Der SQL Server Native Client ODBC-Treiber ordnet SQL Server SQL-Datentypen ODBC-Datentypen zu. In den folgenden Abschnitten werden die SQL Server SQL-Datentypen und die ODBC SQL-Datentypen erläutert, denen sie zugeordnet sind. Außerdem werden die ODBC-SQL-Datentypen und die zugehörigen ODBC-C-Datentypen sowie die unterstützten und standardmäßigen Konvertierungen erklärt.
Hinweis
Der SQL Server-Zeitstempel-Datentyp ist dem SQL_BINARY- oder SQL_VARBINARY ODBC-Datentyp zugeordnet, da die Werte in Zeitstempelspalten keine Datumstimewerte sind, sondern binäre(8) oder varbinary(8)-Werte, die die Abfolge der SQL Server-Aktivität in der Zeile angeben. Wenn der ODBC-Treiber des nativen SQL Server-Clients einen SQL_C_WCHAR (Unicode)-Wert findet, der eine ungerade Anzahl von Bytes darstellt, wird das nachfolgende ungerade Byte abgeschnitten.
Arbeiten mit dem 'sql_variant'-Datentyp in ODBC
Die Sql_variant-Datentypspalte kann jeden der Datentypen in SQL Server enthalten, mit Ausnahme großer Objekte (LOBs), z . B. Text, ntext und Bild. Die Spalte kann z. B. kleine Werte für einige Zeilen, Gleitkommawerte für andere Zeilen und Char/nchar-Werte im Restlichen enthalten.
Der datentyp sql_variant ähnelt dem Datentyp Variant in Visual Basic.
Abrufen von Daten vom Server
ODBC verfügt nicht über ein Konzept von Variantentypen, schränkt die Verwendung des sql_variant Datentyps mit einem ODBC-Treiber in SQL Server ein. Wenn eine Bindung angegeben ist, muss der datentyp sql_variant in SQL Server an einen der dokumentierten ODBC-Datentypen gebunden werden. SQL_CA_SS_VARIANT_TYPE gibt ein neues Attribut, das für den ODBC-Treiber des nativen SQL Server-Clients spezifisch ist, den Datentyp einer Instanz in der Spalte sql_variant an den Benutzer zurück.
Wenn keine Bindung angegeben ist, kann die SQLGetData-Funktion verwendet werden, um den Datentyp einer Instanz in der spalte sql_variant zu bestimmen.
Führen Sie die folgenden Schritte aus, um sql_variant Daten abzurufen.
Rufen Sie SQLFetch auf, um die abgerufene Zeile zu positionieren.
Rufen Sie SQLGetData auf, und geben Sie SQL_C_BINARY für den Typ und 0 für die Datenlänge an. Dadurch wird der Treiber gezwungen, die sql_variant Kopfzeile zu lesen. Die Kopfzeile stellt den Datentyp dieser Instanz in der spalte sql_variant bereit. SQLGetData gibt die Größe (in Bytes) des Werts zurück.
Rufen Sie SQLColAttribute auf, indem Sie SQL_CA_SS_VARIANT_TYPE als Attributwert angeben. Diese Funktion gibt den C-Datentyp der Instanz in der Spalte sql_variant an den Client zurück.
Im folgenden Codesegment werden die vorhergehenden Schritte gezeigt.
while ((retcode = SQLFetch (hstmt))==SQL_SUCCESS)
{
if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
{
SQLError (NULL, NULL, hstmt, NULL,
&lNativeError,szError,MAX_DATA,&sReturned);
printf_s ("%s\n",szError);
goto Exit;
}
retcode = SQLGetData (hstmt, 1, SQL_C_BINARY,
pBuff,0,&Indicator);//Figure out the length
if (retcode != SQL_SUCCESS_WITH_INFO && retcode != SQL_SUCCESS)
{
SQLError (NULL, NULL, hstmt, NULL, &lNativeError,
szError,MAX_DATA,&sReturned);
printf_s ("%s\n",szError);
goto Exit;
}
printf_s ("Byte length : %d ",Indicator); //Print out the byte length
int iValue = 0;
retcode = SQLColAttribute (hstmt, 1, SQL_CA_SS_VARIANT_TYPE, NULL,
NULL,NULL,&iValue); //Figure out the type
printf_s ("Sub type = %d ",iValue);//Print the type, the return is C_type of the column]
// Set up a new binding or do the SQLGetData on that column with
// the appropriate type
}
Wenn der Benutzer die Bindung mit SQLBindCol erstellt, liest der Treiber die Metadaten und die Daten. Der Treiber konvertiert die Daten dann in den entsprechenden in der Bindung angegebenen ODBC-Typ.
Senden von Daten an den Server
SQL_SS_VARIANT wird ein neuer Datentyp, der für den SQL Server Native Client ODBC-Treiber spezifisch ist, für Daten verwendet, die an eine sql_variant Spalte gesendet werden. Beim Senden von Daten an den Server mithilfe von Parametern (z. B. INSERT INTO TableName VALUES (?,?)) wird SQLBindParameter verwendet, um die Parameterinformationen einschließlich des C-Typs und des entsprechenden SQL Server-Typs anzugeben. Der SQL Server Native Client ODBC-Treiber konvertiert den C-Datentyp in einen der entsprechenden sql_variant Untertypen.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für