【问题标题】:Sql type to CLR type stringSql 类型转 CLR 类型字符串
【发布时间】: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


    【解决方案1】:

    使用SQL-CLR Type Mapping 制作一个将 DATA_TYPE 映射到 CLR_TYPE 的小表,然后加入它。获得所有类型应该不需要太多的剪切和粘贴。

    注意SQL-CLR Type Mismatches

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

    【讨论】:

    • 我正在使用图形界面生成 sql 查询,所以我需要它以这种方式工作,但我得到了你的建议,我选择快速完成并忽略了准确性
    • 使用linq是指实体框架吗?我想要做的是获取 sql 列模式并将其转换为对象
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多