sql-server - 如何获得带有括号和所有内容的 SQL Server 列定义?

标签 sql-server types information-schema

我需要一种智能方法,以可在 CREATE TABLE 语句中使用的方式从 INFORMATION_SCHEMA.COLUMNS 中获取数据类型。问题是需要理解“额外”字段,例如 NUMERIC_PRECISION 和 NUMERIC_SCALE。

显然,我可以忽略 INTEGER 列(精度为 10,小数位数为 0),但我还会对其他类型感兴趣,例如 NUMERIC。因此,无需编写大量代码来解析表,关于如何从列定义中获取某种字段速记有什么想法吗?

我希望能够得到类似的东西: 整数, 约会时间, 钱, 数字**(10,2)**

最佳答案

select column_type = data_type + 
    case
        when data_type like '%text' then ''
        when data_type like '%char' and character_maximum_length = -1 then '(max)'
        when character_maximum_length is not null then '(' + convert(varchar(10), character_maximum_length) + ')'
        when data_type = 'numeric' then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ', ' + 
            convert(varchar(10), isnull(numeric_scale, 0)) + ')'
        else ''
    end
,*
from information_schema.columns

关于sql-server - 如何获得带有括号和所有内容的 SQL Server 列定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253324/

相关文章:

MySQL 语句在所有表中搜索一个特定的列?

sql - 使用 SSMS 编辑模式在 SQL 表中添加当前日期时间

SQL CTE 和 ORDER BY 影响结果集

javascript - 添加字符串和数字时,JavaScript 如何转换为字符串?

exception - Haskell:处理类型和异常

JSON API 规范 - 服务器职责说明

postgresql - pg_catalog 表中某个字段的 NUMERIC 精度和比例在哪里?

sql - 如何判断索引是否包含 varchar(max) 类型的列?

sql-server - Microsoft SQL Server 2005 控制台写入行

mysql - 对具有相同模式名称的多个数据库使用 mysql 函数