Sql类型为CLR类型字符串

时间:2013-11-22 00:28:39

标签: sql sql-server

考虑以下查询

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 
  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以及任何可以表示为十进制的类型都会生成'Decimal'
  • nvarchar,ncchar,text和表示字符串的任何类型 生成'String'
  • 日期时间,日期应生成'DateTime'
  • Int将产生'Int'
  • bit应生成'Bool'

有没有比我建议的更方便的方式?

1 个答案:

答案 0 :(得分:1)

创建一个小表,使用SQL-CLR Type Mapping将DATA_TYPE映射到CLR_TYPE并加入其中。得到所有类型的东西不应该太多切割和粘贴。

留意SQL-CLR Type Mismatches

另外,你确定你不想为此使用LINQ吗?你可能正在重新发明轮子。