【发布时间】:2015-07-17 02:13:59
【问题描述】:
我已经成功地从下面的查询中获取了表和列的信息。
是否有任何方便的方法来获取带有 nvarchar(20)、numeric(14,2)、varchar(max) 等描述的类型名称,而不是大量的 CASE 语句?
SELECT
o.name AS TableName,
c.name AS ColumnName,
t.name +
CASE
WHEN t.name LIKE '%char' THEN '(' +
CASE
WHEN c.max_length = -1 THEN 'max'
ELSE CONVERT(varchar(10), c.max_length / CASE WHEN t.name LIKE 'n%' THEN 2 ELSE 1 END)
END + ')'
WHEN t.name IN ('numeric', 'decimal') THEN '(' + CONVERT(varchar(4), c.precision) + ',' + CONVERT(varchar(4), c.scale) + ')'
-- WHEN .... many other types
ELSE ''
END AS TypeName
FROM
sys.objects o
INNER JOIN sys.columns c ON o.object_id = c.object_id
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id AND t.user_type_id = c.user_type_id
WHERE
o.is_ms_shipped = 0
ORDER BY
o.name,
c.column_id
编辑
sp_help 和信息架构返回的名称不是 nvarchar(20)、numeric(14,2)、varchar(max)
【问题讨论】:
-
我很确定你被 case 表达式卡住了,因为据我所知,没有系统视图可以以你想要的格式显示信息。
-
@jpw 是的,你是对的,知道真相很难过
标签: sql sql-server-2008