Сопоставление типов данных (ODBC)
Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)
Драйвер ODBC собственного клиента SQL Server сопоставляет типы данных SQL Server с типами данных ODBC SQL. В следующих разделах рассматриваются типы данных SQL Server и типы данных SQL ODBC, с которыми они сопоставляются. В разделах также обсуждаются типы данных ODBC SQL и соответствующие им типы данных ODBC C, а также поддерживаемые преобразования и преобразования по умолчанию.
Примечание.
Тип данных метки времени SQL Serverсопоставляется с типом данных ODBC SQL_BINARY или SQL_VARBINARY, так как значения в столбцах меток времени не являются значениями datetime, а двоичными(8) или varbinary(8) значениями, указывающими последовательность действий SQL Server в строке. Если драйвер ODBC собственного клиента SQL Server встречает значение SQL_C_WCHAR (Юникод), которое является нечетным числом байтов, то конечный нечетный байт усечен.
Работа с типом данных sql_variant в ODBC
Столбец типа данных sql_variant может содержать любой из типов данных в SQL Server, кроме больших объектов (LOOB), таких как текст, ntext и изображение. Например, столбец может содержать небольшие значения для некоторых строк, значений с плавающей запятой для других строк и значений char/nchar в оставшейся строке.
Тип данных sql_variant аналогичен типу данных Variant в Visual Basic.
Получение данных с сервера
ODBC не имеет понятия о типах вариантов, ограничивающих использование типа данных sql_variant с драйвером ODBC в SQL Server. В SQL Server, если задана привязка, sql_variant тип данных должен быть привязан к одному из документированных типов данных ODBC. SQL_CA_SS_VARIANT_TYPE, новый атрибут, характерный для драйвера ODBC собственного клиента SQL Server, возвращает тип данных экземпляра в столбце sql_variant пользователю.
Если привязка не указана, функция SQLGetData может использоваться для определения типа данных экземпляра в столбце sql_variant .
Чтобы получить sql_variant данные, выполните следующие действия.
Вызовите SQLFetch , чтобы разместить полученную строку.
Вызовите SQLGetData, указав SQL_C_BINARY для типа и 0 для длины данных. Это заставляет драйвер считывать заголовок sql_variant . Заголовок предоставляет тип данных этого экземпляра в столбце sql_variant . SQLGetData возвращает размер (в байтах) значения.
Вызовите SQLColAttribute , указав SQL_CA_SS_VARIANT_TYPE в качестве значения атрибута. Эта функция вернет тип данных C экземпляра в столбце sql_variant клиенту.
Фрагмент кода, демонстрирующий вышеуказанные шаги:
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
}
Если пользователь создает привязку с помощью SQLBindCol, драйвер считывает метаданные и данные. Затем драйвер преобразует данные к соответствующему типу ODBC, указанному в привязке.
Отправка данных на сервер
SQL_SS_VARIANT новый тип данных, характерный для драйвера ODBC собственного клиента SQL Server, используется для данных, отправляемых в столбец sql_variant. При отправке данных на сервер с помощью параметров (например, INSERT INTO TableName VALUES (?,?)), SQLBindParameter используется для указания сведений о параметрах, включая тип C и соответствующий тип SQL Server. Драйвер ODBC собственного клиента SQL Server преобразует тип данных C в один из соответствующих подтипов sql_variant .
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по