zoukankan      html  css  js  c++  java
  • SQLServer之数据库表转化为实体类【带注释】

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

    DECLARE @TableName sysname = 'TableName';
    DECLARE @Result VARCHAR(MAX) = 'public class ' + @TableName + '
    {';
    
    SELECT  @Result = @Result  + CHAR(13) + '    ///<summary>' + CHAR(13)
            + '    ///' + CAST(desr AS NVARCHAR) + CHAR(13)
            + '    ///</summary>' + '
        public ' + ColumnType + NullableSign + ' ' + colname + ' '  + ' { get; set; }
        '
    FROM    (SELECT    column_id ColumnId,
                        ISNULL(t.desctr, '') AS desr,
                        col.name colname,
                         CASE typ.name
                          WHEN 'bigint' THEN 'long'
                          WHEN 'binary' THEN 'byte[]'
                          WHEN 'bit' THEN 'bool'
                          WHEN 'char' THEN 'string'
                          WHEN 'date' THEN 'DateTime'
                          WHEN 'datetime' THEN 'DateTime'
                          WHEN 'datetime2' THEN 'DateTime'
                          WHEN 'datetimeoffset' THEN 'DateTimeOffset'
                          WHEN 'decimal' THEN 'decimal'
                          WHEN 'float' THEN 'float'
                          WHEN 'image' THEN 'byte[]'
                          WHEN 'int' THEN 'int'
                          WHEN 'money' THEN 'decimal'
                          WHEN 'nchar' THEN 'string'
                          WHEN 'ntext' THEN 'string'
                          WHEN 'numeric' THEN 'decimal'
                          WHEN 'nvarchar' THEN 'string'
                          WHEN 'real' THEN 'double'
                          WHEN 'smalldatetime' THEN 'DateTime'
                          WHEN 'smallint' THEN 'short'
                          WHEN 'smallmoney' THEN 'decimal'
                          WHEN 'text' THEN 'string'
                          WHEN 'time' THEN 'TimeSpan'
                          WHEN 'timestamp' THEN 'DateTime'
                          WHEN 'tinyint' THEN 'byte'
                          WHEN 'uniqueidentifier' THEN 'Guid'
                          WHEN 'varbinary' THEN 'byte[]'
                          WHEN 'varchar' THEN 'string'
                          ELSE 'UNKNOWN_' + typ.name
                        END ColumnType ,
                        CASE WHEN col.is_nullable = 1
                                  AND typ.name IN ( 'bigint', 'bit', 'date',
                                                    'datetime', 'datetime2',
                                                    'datetimeoffset', 'decimal',
                                                    'float', 'int', 'money',
                                                    'numeric', 'real',
                                                    'smalldatetime', 'smallint',
                                                    'smallmoney', 'time',
                                                    'tinyint', 'uniqueidentifier' )
                             THEN '?'
                             ELSE ''
                        END NullableSign
              FROM      sys.columns col
                       LEFT  JOIN ( SELECT  ISNULL(CAST(g.value AS VARCHAR), '') desctr ,
                                            g.minor_id AS minor_id
                                    FROM    sys.extended_properties g
                                    WHERE   g.major_id = OBJECT_ID(@TableName)
                                  ) t ON t.minor_id = col.column_id
                        JOIN sys.types typ ON col.system_type_id = typ.system_type_id
                                              AND col.user_type_id = typ.user_type_id   
              WHERE     object_id = OBJECT_ID(@TableName)
            ) t
    ORDER BY ColumnId;
    
    SET @Result = @Result + '
    }';
    
    PRINT @Result;

    最终效果如下:

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

  • 相关阅读:
    禁止input密码自动填充及浏览器记住密码完整解决方案
    修改微信小程序的原生button样式
    css 多行超长点点点
    Vue中如何导入并读取Excel数据
    微信小程序 页面打开时scrollview动态滚动到指定位置
    :class和:style的三元表达式
    Vue3.0手机端页面适配屏幕px2rem(自动将px转化为rem)
    9.JavaScript内置对象
    8.JavaScript对象
    7.JavaScript 预解析
  • 原文地址:https://www.cnblogs.com/jerque/p/11388405.html
Copyright © 2011-2022 走看看