2014-10-24 2 views
0

Я хочу знать тип данных для столбцов в моей таблице. Для этого я назвал функцию ODBC SQLColumns. Но для каждого столбца, который имеет тип «дата», эта функция говорит, что столбец является varchar, но это не так. Информация о типе данных, которую я знаю через поле «DATA_TYPE», которое возвращает код int типа -9, но этот код должен быть 91. В чем проблема, скажите, пожалуйста.SQLColumns: столбец Date отображается как столбец varchar

P.S. Я использую для получения информации о стандартном примере кода C++, который находится на официальной странице. P.P.S Для других СУБД эта функция корректно работает SQLColumns()

Спасибо!

ответ

0

Я думаю, его зависит от драйвера ODBC, который вы используете. Если он не поддерживает (или запрашивает) версию 2008 года или позже, то тип DATE будет правильно возвращен как VARCHAR.

0

Вы можете выполнить запрос, чтобы получить информацию столбца таблицы:

SELECT tbl.name AS tblName, 
    col.name AS fldName, 
    typ.name AS Type, 
    col.length AS length, 
    col.isnullable AS isnullable, 
    cmt.text AS DefaultVal 
FROM sys.sysobjects tbl 
INNER JOIN sys.syscolumns col 
    ON col.id = tbl.id 
INNER JOIN sys.systypes typ 
    ON typ.xtype = col.xtype 
LEFT JOIN sys.sysobjects cnst 
    ON cnst.xtype = 'D' 
    AND cnst.parent_obj = tbl.id 
    AND col.cdefault = cnst.id 
LEFT JOIN sys.syscomments cmt 
    ON cmt.id = cnst.id 
WHERE (tbl.xtype = 'U' OR tbl.xtype = 'V') 
    AND (tbl.name <> N'dtproperties') 
    AND (tbl.name <> N'sysconstraints') 
    AND (tbl.name <> N'syssegments') 
    AND (tbl.name = 'MyTestTable') 
ORDER BY tbl.name, col.name 

Выход:

tblName  fldName  Type length isnullable DefaultVal 
MyTestTable action  varchar 10 0 NULL 
MyTestTable actionby varchar 100 0 NULL 
MyTestTable actiondate datetime 8 0 NULL 
MyTestTable colname  varchar 50 0 NULL 
MyTestTable formfieldname varchar 100 0 NULL 
MyTestTable newvalue varchar -1 0 NULL 
MyTestTable oldvalue varchar -1 0 NULL 
MyTestTable primarykey varchar 100 0 NULL 
MyTestTable sequence int 4 0 NULL 
+0

Спасибо, это работает. Но этот пример подходит только для MS SQL. Моя программа также может получать информацию о столбцах из другой СУБД. Кстати, для других СУБД эта функция SQLColumns() работает правильно – nikolayandr

+0

вы отметили этот вопрос как sql-server, но для других rdbs вы можете делать похожие sql-запросы. –

+0

Не видя свой код, невозможно сказать, почему он ломается ... –

Смежные вопросы