【问题标题】:Get the SQL table column schema with Datatype and Max Length in number value获取具有数据类型和最大长度的 SQL 表列模式
【发布时间】:2023-03-12 01:17:01
【问题描述】:

我有一个 Table_A,其列名称和数据类型如下:

QUANTITY    int
PO_NO       varchar(13)
FLG         char(1)
AMOUNT       money

我想进行这样的查询,返回结果如下:

QUANTITY    TYPE="3"    LENGHT="4"
PO_NO       TYPE="200"  LENGHT="13"
FLG         TYPE="129"  LENGHT="1"
AMOUNT      TYPE="6"    LENGTH="8"

我使用此查询获取列架构,但结果与我的预期不一样

select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH       
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='Table_A'

结果:

COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH  
QUANTITY    int         NULL
PO_NO       varchar     13
FLG         char        1
AMOUNT      money       NULL

所以,我的问题是:如何知道数据类型 int 等价于 Type=3 和 length =4 等等。

【问题讨论】:

  • SQL Server 2008。请查看我的帖子:stackoverflow.com/questions/49586370/…
  • 所需结果中的长度不是表架构,而是 SQL Server 用于存储数据的物理字节。 ISO SQL INFORMATION_SCHEMA 视图返回逻辑模式,而不是物理实现。您可以使用sys.columns 之类的目录视图以及将SQL 类型映射到ADO 类型代码来获得所需的结果。为什么要关心数据类型的物理长度(以字节为单位)?

标签: sql sql-server sql-server-2008 schema


【解决方案1】:

事实上,int、mother 和其他非字符串数据类型具有 fidex 定义的长度,您无法在 CHARACTER_MAXIMUM_LENGTH 列中找到合适的值 如果你需要,你可以用 CASE WHEN 重新映射

select COLUMN_NAME
        , DATA_TYPE
        , CASE DATA_TYPE 
            WHEN 'int' THEN 4 
            WHEN 'money' THEN 8  
            ELSE CHARACTER_MAXIMUM_LENGTH 
          END
        , CHARACTER_MAXIMUM_LENGTH       
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='Table_A'

【讨论】:

  • 但我也需要 CHARACTER_MAXIMUM_LENGTH。我还没有找到任何关于 SQL Server 的书可以向我解释为什么 Data Type : money 有 Type=6 和 Lenght=8 等等。我想了解这一点以从 SQL 表中生成 XML 文件
  • 我想我会在将表导出到 XML 文件时使用您的解决方案并进行一些修改以适合我的项目,该文件将导入多种 RDBMS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多