SQLColumns:Date列显示为varchar列

时间:2014-10-24 12:04:06

标签: sql-server sql-server-2008-r2 odbc

我想知道表格中列的数据类型。为此,我调用了ODBC函数SQLColumns。但是对于每个具有“date”类型的列,此函数表示该列是varchar,但事实并非如此。有关数据类型的信息我通过字段“DATA_TYPE”知道它返回类型为-9的int代码,但是这段代码必须是91.有什么问题,请告诉我。

P.S。我用于检索官方页面上有关列标准C ++代码示例的信息。 P.P.S对于其他DBMS,此函数SQLColumns()可正常工作

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我猜它依赖于你正在使用的ODBC驱动程序。如果它不支持(或请求)2008或更高版本的TDS版本,则类型DATE将正确返回为VARCHAR。