【发布时间】:2013-11-22 00:28:39
【问题描述】:
考虑以下查询
SELECT table_name AS SqlColumnTableName,
column_name AS SqlColumnName,
data_type AS SqlColumnType,
CASE
WHEN is_nullable = 'YES' THEN 1
ELSE 0
END AS IsNullable,
CASE
WHEN numeric_scale = 0 THEN 'Int'
WHEN Isnull(numeric_precision, 0) > 0 THEN 'Decimal'
WHEN Isnull(datetime_precision, 0) > 0 THEN 'DateTime'
WHEN character_set_name IS NOT NULL THEN 'String'
WHEN data_type = 'bit' THEN 'Bool'
END AS CLR_Type,
CASE
WHEN column_name IN(SELECT column_name
FROM information_schema.key_column_usage) THEN 1
ELSE 0
END AS IsPrimaryKey
FROM information_schema.columns
通过这个查询,我得到了一些关于列的信息,包括它的名称和表名,以及它是否是主键列,但是我试图找到一种根据列的 sql 类型生成字符串的好方法你可以在这个case语句中看到
CASE
WHEN numeric_scale = 0 THEN 'Int'
WHEN Isnull(numeric_precision, 0) > 0 THEN 'Decimal'
WHEN Isnull(datetime_precision, 0) > 0 THEN 'DateTime'
WHEN character_set_name IS NOT NULL THEN 'String'
WHEN data_type = 'bit' THEN 'Bool'
END AS CLR_Type,
- float、money、real 和任何可以表示为十进制的类型都应生成“十进制”
- nvarchar、ncchar、text 和表示字符串的任何类型都应 产生'字符串'
- 日期时间,日期应产生'DateTime'
- Int 应产生一个“Int”
- 位应产生一个“布尔”
有没有比我建议的更方便的方法?
【问题讨论】:
标签: sql sql-server