1.在开发过程中,有时候需要将数据库表转化为实体类。手敲除了不方便,还容易出错。本着DRY+懒人原则,参考了一位老司机的博客【见底部】,并在其基础上进行了优化。【原先是不带注释的】

  1. DECLARE @TableName sysname = 'TableName';
  2. DECLARE @Result VARCHAR(MAX) = 'public class ' + @TableName + '
  3. {';
  4.  
  5. SELECT @Result = @Result + CHAR(13) + ' ///<summary>' + CHAR(13)
  6. + ' ///' + CAST(desr AS NVARCHAR) + CHAR(13)
  7. + ' ///</summary>' + '
  8. public ' + ColumnType + NullableSign + ' ' + colname + ' ' + ' { get; set; }
  9. '
  10. FROM (SELECT column_id ColumnId,
  11. ISNULL(t.desctr, '') AS desr,
  12. col.name colname,
  13. CASE typ.name
  14. WHEN 'bigint' THEN 'long'
  15. WHEN 'binary' THEN 'byte[]'
  16. WHEN 'bit' THEN 'bool'
  17. WHEN 'char' THEN 'string'
  18. WHEN 'date' THEN 'DateTime'
  19. WHEN 'datetime' THEN 'DateTime'
  20. WHEN 'datetime2' THEN 'DateTime'
  21. WHEN 'datetimeoffset' THEN 'DateTimeOffset'
  22. WHEN 'decimal' THEN 'decimal'
  23. WHEN 'float' THEN 'float'
  24. WHEN 'image' THEN 'byte[]'
  25. WHEN 'int' THEN 'int'
  26. WHEN 'money' THEN 'decimal'
  27. WHEN 'nchar' THEN 'string'
  28. WHEN 'ntext' THEN 'string'
  29. WHEN 'numeric' THEN 'decimal'
  30. WHEN 'nvarchar' THEN 'string'
  31. WHEN 'real' THEN 'double'
  32. WHEN 'smalldatetime' THEN 'DateTime'
  33. WHEN 'smallint' THEN 'short'
  34. WHEN 'smallmoney' THEN 'decimal'
  35. WHEN 'text' THEN 'string'
  36. WHEN 'time' THEN 'TimeSpan'
  37. WHEN 'timestamp' THEN 'DateTime'
  38. WHEN 'tinyint' THEN 'byte'
  39. WHEN 'uniqueidentifier' THEN 'Guid'
  40. WHEN 'varbinary' THEN 'byte[]'
  41. WHEN 'varchar' THEN 'string'
  42. ELSE 'UNKNOWN_' + typ.name
  43. END ColumnType ,
  44. CASE WHEN col.is_nullable = 1
  45. AND typ.name IN ( 'bigint', 'bit', 'date',
  46. 'datetime', 'datetime2',
  47. 'datetimeoffset', 'decimal',
  48. 'float', 'int', 'money',
  49. 'numeric', 'real',
  50. 'smalldatetime', 'smallint',
  51. 'smallmoney', 'time',
  52. 'tinyint', 'uniqueidentifier' )
  53. THEN '?'
  54. ELSE ''
  55. END NullableSign
  56. FROM sys.columns col
  57. LEFT JOIN ( SELECT ISNULL(CAST(g.value AS VARCHAR), '') desctr ,
  58. g.minor_id AS minor_id
  59. FROM sys.extended_properties g
  60. WHERE g.major_id = OBJECT_ID(@TableName)
  61. ) t ON t.minor_id = col.column_id
  62. JOIN sys.types typ ON col.system_type_id = typ.system_type_id
  63. AND col.user_type_id = typ.user_type_id
  64. WHERE object_id = OBJECT_ID(@TableName)
  65. ) t
  66. ORDER BY ColumnId;
  67.  
  68. SET @Result = @Result + '
  69. }';
  70.  
  71. PRINT @Result;

最终效果如下:

参考链接:https://www.cnblogs.com/bayes/p/6206297.html

SQLServer之数据库表转化为实体类【带注释】的更多相关文章

  1. net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现

    1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...

  2. GG_Model 类库与数据库表对应建立实体类

    3.4.GG_Model 类库与数据库表对应建立实体类 我这里不教大家写代码,直接用TT模板自动生成,省去写代码的麻烦. A. 三个文件MysqlDbhelper.ttinclude .mysqlMa ...

  3. hibernate通过数据库表反向生成实体类

      步骤一: window-->open Perspective-->MyEclipse Java Persistence 进行了上面的 操作后会出现一个视图DB Brower:MyEcl ...

  4. MyEclipse从数据库表反向生成实体类之Hibernate方式(反向工程)

    一.打开Myeclipse Database Explorer 二.新建[New..] 三.选择数据库,添加驱动 四.测试连接 五.选中数据库中的表单击右键选择[Hibernate Rever..] ...

  5. 根据数据库表结构生成java类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

  6. JDBCUtils,根据当前MySQL数据库下面的表生成java实体类

    自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵. 初始化配置: //驱动程序名//不固定,根据驱动 static String driver = & ...

  7. eclipse从数据库逆向生成Hibernate实体类

    做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...

  8. 由数据库表生成jpa实体工具

    package cn.net.yto.aaa.dao.generator; /** * 由数据库表生成jpa实体工具 * * @author huike * Created by gf.liu on ...

  9. PowerDesigner16.5物理数据表生成C#实体类Model

    原文:PowerDesigner16.5物理数据表生成C#实体类Model 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/da454122373/a ...

随机推荐

  1. TypeScript躬行记(3)——类

    类是对对象的抽象,描述了对象的特征和行为,而对象就是类的实例.ES6引入了类的概念(相关内容可参考ES类和ES6类的继承两节),TypeScript在此基础上,不仅根据ES7等规范完善了类的语法,还添 ...

  2. SQL中Group By和having的用法

    转自 ITGirl笑笑   一.GROUP BY GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX. ...

  3. 类型,值,变量知识总结(js)

    文章目录: 一. 全局变量和局部变量分析 二. 从两个角度去理解变量作用域 三. 关于浮点数值计算产生舍入误差的问题分析 四. 理解js预解析 一. 全局变量和局部变量分析 在函数外部由var定义的变 ...

  4. Maven pom.xml 全配置(二)不常用配置

    Maven pom.xml 全配置(二)不常用配置 这里贴出Maven pom.xml文件中使用率较少的配置参数,如果此篇文档中没有找到你想要的参数,移步Maven pom.xml 全配置(一)常用配 ...

  5. leetcode之缺失的第一个正数

    给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0]输出: 3示例 2: 输入: [3,4,-1,1]输出: 2示例 3: 输入: [7,8,9,11,12] ...

  6. MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用

    1.需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功 CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_memb ...

  7. 部署flas到服务器:No module named flask

    首先,你要先把nginx和uwsgi安装好(个人觉得这搭起来比较舒服),可以通过pip 或者源安装,具体方法在前面我有提到过,好了接下来我就讲讲我的踩坑经历与解决办法. 我先采用的pip  insta ...

  8. linux bash变量作用域

    linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...

  9. linux学习第一周

    1. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 2. 安装Centos7.6操作系统,创建一个自己名字的用户名,并可以正常登录,将主要步骤截图. 3. 配置环境变量,实现执行hi ...

  10. 【转】淘宝UED上关于chrome的transition闪烁问题的解决方案

    最近在用BetterScroll实现一个功能的时候,在滚动区域中会有一个绝对定位的按钮,结果在IOS中出现了快速滚动,停止的时候,会先消失后显现的问题,所以查找了相关的文章,发现是transition ...