mysql生成model存储过程

DELIMITER $$

USE `数据库`$$

DROP PROCEDURE IF EXISTS `GetCSharpModel`$$

CREATE DEFINER=`root`@`%` PROCEDURE `GetCSharpModel`(IN pDataBaseName VARCHAR(255),IN pTableName VARCHAR(255))
BEGIN
DECLARE vClassName VARCHAR(255);
DECLARE vClassCode MEDIUMTEXT;
DECLARE colComment VARCHAR(1024);
DECLARE colType VARCHAR(1024);
DECLARE fName VARCHAR(1024);
DECLARE fNameNew VARCHAR(1024);
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE code_cursor CURSOR FOR 
            SELECT ColumnComment,ColumnType,FieldName FROM temp1; 
DECLARE CONTINUE HANDLER FOR 
            NOT FOUND SET v_finished = 1;
            -- 生成实体类名
            SELECT REPLACE(GROUP_CONCAT(CONCAT(LOWER(LEFT(A.Field,1)),SUBSTRING(A.Field,2,(LENGTH(A.Field)-1)))),',','')
            
            FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(pTableName,'_',help_topic_id+1),'_',-1) AS FIELD 
                        FROM mysql.help_topic 
            WHERE help_topic_id < LENGTH(pTableName)-LENGTH(REPLACE(pTableName,'_',''))+1) A 
                        
            INTO vClassName ;
      -- 创建临时表
    CREATE TEMPORARY TABLE IF NOT EXISTS  temp1 ENGINE=MYISAM  
    AS (
                    SELECT  COLUMN_NAME  AS FieldName, COLUMN_COMMENT AS ColumnComment,
                        CASE  
                            WHEN DATA_TYPE='bigint' AND IS_NULLABLE = 'YES'  THEN 'long?'
                            WHEN DATA_TYPE='bit' AND IS_NULLABLE = 'YES'  THEN 'bool?'
                            WHEN DATA_TYPE='char' AND COLUMN_TYPE = 'char(36)' AND IS_NULLABLE = 'YES' THEN 'Guid?'
                            WHEN DATA_TYPE='date' AND IS_NULLABLE = 'YES'  THEN 'DateTime?'
                            WHEN DATA_TYPE='datetime' AND IS_NULLABLE = 'YES' THEN 'DateTime?'
                            WHEN DATA_TYPE='decimal' AND IS_NULLABLE = 'YES' THEN 'decimal?'
                            WHEN DATA_TYPE='float' AND IS_NULLABLE = 'YES' THEN 'float?'
                            WHEN DATA_TYPE='int' AND IS_NULLABLE = 'YES' THEN 'int?'
                            WHEN DATA_TYPE='numeric' AND IS_NULLABLE = 'YES' THEN 'decimal?'
                            WHEN DATA_TYPE='decimal' AND IS_NULLABLE = 'YES' THEN 'decimal?'
                            WHEN DATA_TYPE='double' AND IS_NULLABLE = 'YES' THEN 'double?'
                            WHEN DATA_TYPE='real' AND IS_NULLABLE = 'YES' THEN 'double?'
                            WHEN DATA_TYPE='smallint' AND IS_NULLABLE = 'YES' THEN 'short?'
                            WHEN DATA_TYPE='mediumint' AND IS_NULLABLE = 'YES' THEN 'int?'
                            WHEN DATA_TYPE='time'  AND IS_NULLABLE = 'YES' THEN 'TimeSpan?'
                            WHEN DATA_TYPE='timestamp' AND IS_NULLABLE = 'YES' THEN 'DateTime?'
                            WHEN DATA_TYPE='tinyint' AND COLUMN_TYPE = 'tinyint(1)' AND IS_NULLABLE = 'YES' THEN 'bool?'
                            WHEN DATA_TYPE='tinyint' AND IS_NULLABLE = 'YES' THEN 'byte?'
                            WHEN DATA_TYPE='year'  AND IS_NULLABLE = 'YES' THEN 'uint?'
                            
                            WHEN DATA_TYPE='bigint' THEN 'long'
                            WHEN DATA_TYPE='binary' THEN 'byte[]'
                            WHEN DATA_TYPE='bit' THEN 'bool'                
                            WHEN DATA_TYPE='char' AND COLUMN_TYPE = 'char(36)' THEN 'Guid'                    
                            WHEN DATA_TYPE='date' THEN 'DateTime'                
                            WHEN DATA_TYPE='datetime' THEN 'DateTime'    
                            WHEN DATA_TYPE='decimal' THEN 'decimal'    
                            WHEN DATA_TYPE='float' THEN 'float'
                            WHEN DATA_TYPE='image' THEN 'byte[]'
                            WHEN DATA_TYPE='int' THEN 'int'
                            WHEN DATA_TYPE='numeric' THEN 'decimal'
                            WHEN DATA_TYPE='decimal' THEN 'decimal'
                            WHEN DATA_TYPE='double' THEN 'double'
                            WHEN DATA_TYPE='real' THEN 'double'
                            WHEN DATA_TYPE='smallint' THEN 'short'
                            WHEN DATA_TYPE='mediumint' THEN 'int'
                            WHEN DATA_TYPE='text' THEN 'string'
                            WHEN DATA_TYPE='mediumtext' THEN 'string'
                            WHEN DATA_TYPE='longtext' THEN 'string'                        
                            WHEN DATA_TYPE='time' THEN 'TimeSpan'                        
                            WHEN DATA_TYPE='timestamp' THEN 'DateTime'                        
                            WHEN DATA_TYPE='tinyint' AND COLUMN_TYPE = 'tinyint(1)'  THEN 'bool'
                            WHEN DATA_TYPE='tinyint' THEN 'byte'
                            WHEN DATA_TYPE='varbinary' THEN 'byte[]'
                            WHEN DATA_TYPE='varchar' THEN 'string'
                            WHEN DATA_TYPE='year' THEN 'uint'
                            ELSE 'UNKNOWN_' + DATA_TYPE
                        END AS ColumnType
                        FROM ( SELECT  COLUMN_NAME, DATA_TYPE, COLUMN_TYPE,COLUMN_COMMENT,IS_NULLABLE  FROM INFORMATION_SCHEMA.COLUMNS  WHERE table_schema=pDataBaseName AND table_name = pTableName) A);
    SET vClassCode = '';
        
        -- 打开游标
    OPEN code_cursor;
            get_code: LOOP
                FETCH code_cursor INTO  colComment,colType,fName;
                IF v_finished = 1 THEN
                    LEAVE get_code;
                END IF;
                                
                                -- 处理字段
                                SELECT REPLACE(GROUP_CONCAT(CONCAT(LOWER(LEFT(A.Field,1)),SUBSTRING(A.Field,2,(LENGTH(A.Field)-1)))),',','')
                                FROM 
                                ( SELECT DISTINCT fName AS FIELD 
                                        FROM mysql.help_topic 
                                        WHERE help_topic_id < LENGTH(fName)-LENGTH(REPLACE(fName,'_',''))+1 ) A INTO fNameNew;
                -- 组合代码字符串
                SELECT  CONCAT(vClassCode,'\r\n\r\n', CONCAT( '/// <summary>\r\n','/// ',colComment,'\r\n/// </summary>\r\n', 'public ', colType , ' ' ,fNameNew,' { get; set; }')) 
                                INTO  vClassCode ;
            END LOOP get_code;
        CLOSE code_cursor;
        -- 删除临时表
        DROP TABLE temp1;
    
        -- 最终生成类
        SELECT CONCAT('public class ','m_',pTableName,'\r\n{', vClassCode,'\r\n}') AS ModelClass;
    END$$

DELIMITER ;

使用 call GetCSharpModel('数据库',‘表名’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值