sql - sys.columns.max_length 的替代方案

标签 sql sql-server sql-server-2008

我编写了以下脚本来获取指定表的列上的一些数据:

DECLARE @QueryTable varchar(35);
SET @QueryTable = 'Test';

SELECT DISTINCT
    sys.columns.name AS 'Column',
    sys.types.name AS 'Data type',
    CASE WHEN sys.types.name IN ('varchar', 'char') THEN CAST(sys.columns.max_length AS varchar(5))
    WHEN sys.types.name IN ('decimal', 'numeric') THEN CAST(CAST (sys.columns.precision AS nvarchar(10))  + ', ' + CAST(sys.columns.scale AS nvarchar(10)) AS nvarchar(10))
    WHEN sys.types.name IN ('nvarchar', 'nchar') THEN CAST(sys.columns.max_length / 2 AS varchar(5))
    ELSE '-' END AS 'Max size',
    CASE WHEN sys.columns.is_nullable = 1 THEN 'YES'
    WHEN sys.columns.is_nullable = 0 THEN 'NO' END AS 'Allow nulls',
    CASE WHEN sys.columns.name IN (SELECT Col.COLUMN_NAME from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.CONSTRAINT_NAME
    AND Col.Table_Name = Tab.TABLE_NAME
    AND Constraint_Type = 'PRIMARY KEY'
    AND Col.Table_Name = @QueryTable) THEN 'PK'
    ELSE '' END AS 'Primary Key'
FROM 
    sys.columns, sys.types, sys.tables
WHERE
    sys.tables.object_id = sys.columns.object_id AND
    sys.types.system_type_id = sys.columns.system_type_id AND
    sys.types.user_type_id = sys.columns.user_type_id AND
    sys.tables.name = @QueryTable
ORDER BY sys.columns.name

当然,对于 nvarcharnchar 类型,我得到的 max_length 是该字段实际最大字符长度的两倍。我的问题是,是否有任何地方可以直接获取创建列时定义的实际最大字符长度,而不需要借助这种间接计算?

在我看来,我用于输出数字/小数类型数据的方法也有点困惑。

谢谢

最佳答案

你尝试过吗:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

关于sql - sys.columns.max_length 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37187654/

相关文章:

c# - Integrated Security=True 与 Encrypt=Yes 用法有什么区别?

sql-server - 移动、创建、删除 Azure SQL 弹性池所需的最低访问级别(权限)是多少?

SQL Server FOR XML Path 使重复节点

c# - 将数据行从一个表复制到不同数据库中的另一个类似表 c#

sql-server - 请求失败或者服务没有及时响应?

python - 在 Python 中使用 MySQL 将数据插入特定行

MySQL Join、Select、多个条件

mysql - 使用 SQL 查询合并两个数据集

sql-server - 管理数据库迁移 : scripts vs tools

sql - 如何在一个查询中使用两个 COUNT