已知一个表,tb(aaa,bbb,ccc,ddd)用什么函数可以准确判断tb.ccc字段是什么数据类型,例如是,int, money, datetime, 等等

解决方案 »

  1.   


    --没现成的函数
    select t.name from sysobjects o,syscolumns c,systypes t
    where o.id=c.id and c.xtype=t.xtype
    and o.name='tb' and c.name='ccc'
      

  2.   

    从SQLServer层面好像没有,顶多能想1楼那样查出来,不过C#好像有的。可以考虑从编程语言层面去处理。
      

  3.   

    sys.objects 
    sys.columns 
      

  4.   

    sp_columns返回当前环境中可查询的指定表或视图的列信息。 Transact-SQL 语法约定语法
     
    sp_columns [ @table_name = ] object  [ , [ @table_owner = ] owner ] 
         [ , [ @table_qualifier = ] qualifier ] 
         [ , [ @column_name = ] column ] 
         [ , [ @ODBCVer = ] ODBCVer ]
     参数
    [ @table_name =] object用于返回目录信息的表或视图的名称。object_name 的数据类型为 nvarchar(384),没有默认值。支持通配符模式匹配。[ @table_owner =] owner用于返回目录信息的表或视图的对象所有者。owner 的数据类型为 nvarchar(384),默认值是 NULL。支持通配符模式匹配。如果未指定 owner,则应用基础 DBMS 的默认表或视图可见性规则。在 SQL Server 2005 中,如果当前用户拥有的表或视图具有指定名称,则返回该表的列。如果未指定 owner,并且当前用户不拥有具有指定 object 的表或视图,则 sp_columns 将搜索数据库所有者所拥有的具有指定 object 的表或视图。如果有,则返回该表的列。 [ @table_qualifier =] qualifier表或视图限定符的名称。qualifier 的数据类型为 sysname,默认值是 NULL。许多 DBMS 产品都支持表的三部分构成命名方式 (qualifier.owner.name)。在 SQL Server 中,此列表示数据库名称。在某些产品中,该列表示表所在数据库环境的服务器名。[ @column_name =] column一个单独的列,当只需要目录信息的一列时可使用该参数。column 的数据类型为 nvarchar(384),默认值是 NULL。如果未指定 column,则返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。支持通配符模式匹配。为了获得最大互操作性,网关客户端应只采用 SQL-92 标准模式匹配(% 和 _ 通配符)。[ @ODBCVer =] ODBCVer当前使用的 ODBC 版本。ODBCVer 的数据类型为 int,默认值为 2。该值指示 ODBC 版本为 2。有效值为 2 或 3。有关版本 2 与版本 3 之间的行为差异,请参阅 ODBC SQLColumns 规范。返回代码值
    无结果集
    sp_columns 目录存储过程与 ODBC 中的 SQLColumns 等价。返回的结果按 TABLE_QUALIFIER、TABLE_OWNER 和 TABLE_NAME 排序。列名  数据类型  说明  
    TABLE_QUALIFIER
     sysname
     表或视图限定符的名称。该字段可以为 NULL。
     
    TABLE_OWNER
     sysname
     表或视图所有者的名称。该字段始终返回值。
     
    TABLE_NAME
     sysname
     表或视图的名称。该字段始终返回值。
     
    COLUMN_NAME
     sysname
     所返回的 TABLE_NAME 中每列的列名。该字段始终返回值。
     
    DATA_TYPE
     smallint
     ODBC 数据类型的整数代码。如果该数据类型无法映射到 ODBC 类型,则为 NULL。本机数据类型名称在 TYPE_NAME 列中返回。
     
    TYPE_NAME
     sysname
     表示数据类型的字符串。基础 DBMS 提供此数据类型的名称。
     
    PRECISION
     int
     有效数字位数。PRECISION 列的返回值以 10 为基数。
     
    LENGTH
     int
     数据的传输大小。1
     
    SCALE
     smallint
     小数点后的数字位数。
     
    RADIX
     smallint
     数值数据类型的基数。
     
    NULLABLE
     smallint
     指定为空性。 1 = 可以为 NULL。 0 = NOT NULL。
     
    REMARKS
     varchar(254)
     该字段总是返回 NULL。
     
    COLUMN_DEF
     nvarchar(4000)
     列的默认值。
     
    SQL_DATA_TYPE
     smallint
     SQL 数据类型出现在说明符的 TYPE 字段中时的值。该列与 DATA_TYPE 列相同,datetime 和 SQL-92 interval 数据类型除外。该列始终返回值。
     
    SQL_DATETIME_SUB
     smallint
     datetime 及 SQL-92 interval 数据类型的子类型代码。对于其他数据类型,该列返回 NULL。
     
    CHAR_OCTET_LENGTH
     int
     字符或整数数据类型的列的最大长度(字节)。对于所有其他数据类型,该列返回 NULL。
     
    ORDINAL_POSITION
     int
     列在表中的序号位置。表中的第一列为 1。此列始终返回值。
     
    IS_NULLABLE
     varchar(254)
     表中列的为空性。根据 ISO 规则确定为空性。符合 ISO SQL 的 DBMS 无法返回空字符串。YES = 列可以包含 NULL。 NO = 列不能包含 NULL。如果不知道为空性,该列则返回零长度字符串。该列的返回值与 NULLABLE 列的返回值不同。
     
    SS_DATA_TYPE
     tinyint
     扩展存储过程使用的 SQL Server 数据类型。有关详细信息,请参阅数据类型 (Transact-SQL)。 
     
      

  5.   

    需要分析系统表,sysobjects,syscolumns
      

  6.   

    SELECT * FROM 
    INFORMATION_SCHEMA.[COLUMNS] c
    WHERE c.TABLE_CATALOG='数据库名'
    AND TABLE_NAME='表名'
    AND COLUMN_NAME='列名'