【动软】批量生成mysql数据库存储过程的模板

人工敲代码好累呀!经过近段时间的研究,发现程序可以有snippet来自定义,存储过程却不能得到有效解决,心里很堵!

近两天发现【动软】可以生成项目,网上有很多人有教程,我就不写了。不过还是推荐一下吧:能用官方的,尽量用官方的,毕竟权威一点!

研究发现官方有关于模板的说明,但没有生成mysql存储的模板,网上搜索了一下,有一个模板:mysql动软生成模板,谢谢作者辛勤的劳动!

但是这个模板有点小问题,再加上几个功能不适合我,于是自己再改了一下:

-- ------------------------------------------
-- MYSQL存储过程【动软】批量生成模板
-- 感谢【动软】作者
-- 感谢 其他 免费奉献代码的朋友
-- 以下代码大部分来自网上,但我写了详细的注释,同时更改了一些错误的地方。
-- 希望可以解决大家的问题,同时有不清楚的请联系QQ:876067467,email:[email protected]
-- 我尽力给各位解答。

<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>

-- -----------------------------------
-- 指定的3种类型是datetime,timestamp和bit。
-- datetime,timestamp这2种类型后不跟长度
-- bit这种类型长度获取不了,而且将进行特殊处理
<#
	TableHost host = (TableHost)(Host);
	host.Fieldlist.Sort(CodeCommon.CompareByintOrder);

	int columnCount=host.Fieldlist.Count;
	string IdentityStr="id";
	string specStr="datetime";
	string specStr1="timestamp";
	string specType="bit";
	
	foreach (ColumnInfo c in host.Fieldlist)
	{
		if(c.IsIdentity)	
		{
			IdentityStr=c.ColumnName.ToString().ToLower();
			break;
		}
	}

#>
-- ------------------------------------------
-- 本表  最大的  ID_

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetMaxId`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetMaxId`()
COMMENT '本表  最大的  ID_'
BEGIN
SELECT MAX(Id) FROM <#= host.GetDALClass(host.TableName) #>;
END //
DELIMITER ;

-- ------------------------------------------
--  ID_ 是否存在

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Exists`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Exists`
($_Id int)
COMMENT ' ID_ 是否存在'
BEGIN
SELECT count(1) FROM <#= host.GetDALClass(host.TableName) #> WHERE Id=$_Id ;
END //
DELIMITER ;

-- ------------------------------------------
-- 表 添加记录

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_ADD`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_ADD`(
<#int updateI=1; 
	foreach (ColumnInfo c in host.Fieldlist)
	{ 
		if(c.IsIdentity) { #>
		$_<#= c.ColumnName.ToString()#> <#=c.TypeName#> (<#=c.Length#>)
		<#if (updateI!=columnCount){#>,<#}#><# } 
		else{ #>
			<#if(c.TypeName==specStr || c.TypeName==specStr1){#>
				$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>
			<#}else if(c.TypeName==specType){#>
				$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(1)	
			<#}else{#>
			$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(<#=c.Length#>)
			<#}#>
			<#if (updateI!=columnCount){#>,<#}#>
		<#} 
		updateI++;
	} #>
)
COMMENT '表 添加记录'
BEGIN 
INSERT INTO <#= host.GetDALClass(host.TableName) #>(<#updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;} #><#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<# updateI++;} #>
)VALUES(
<# updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;} #>
$_<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<# updateI++;} #>
);
# set $_<#=IdentityStr#>=last_insert_id();
select last_insert_id();
END //
DELIMITER ;

-- ------------------------------------------
-- 表 更新记录

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Update`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Update`(
<#updateI=1; 
  foreach (ColumnInfo c in host.Fieldlist)
	{ #>
		<#if(c.TypeName==specStr || c.TypeName==specStr1){#>
			$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>
		<#}else if(c.TypeName==specType){#>
			$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(1)
		<#}else{#>
			$_<#= c.ColumnName.ToString() #> <#=c.TypeName#>(<#=c.Length#>)
		<#}#>
		<#if (updateI!=columnCount){#>,<#}#>
		<# updateI++;
	} 
#>)
COMMENT '更新记录'
BEGIN
UPDATE <#= host.GetDALClass(host.TableName) #> SET 
<#updateI=1; foreach (ColumnInfo c in host.Fieldlist)
{ if(c.IsIdentity) { updateI++;continue;}#>
<#= c.ColumnName.ToString().ToLower()#>=$_<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>	
WHERE Id=$_Id ;

END //
DELIMITER ;

-- ------------------------------------------
-- 表 删除记录

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_Delete`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_Delete`(
$_Id int)
COMMENT '删除记录,指定ID_  '
BEGIN
DELETE FROM <#= host.GetDALClass(host.TableName) #>
WHERE Id=$_Id ;

END //
DELIMITER ;

-- ------------------------------------------
-- 表 获取某条记录,指定ID_

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetModel`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetModel`(
$_Id int)
COMMENT '获取某条记录,指定ID_'
BEGIN 
SELECT 
<# updateI=1;foreach (ColumnInfo c in host.Fieldlist)
{ #>
<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>

FROM <#= host.GetDALClass(host.TableName) #>
WHERE Id=$_Id ;

END //
DELIMITER ;

-- ------------------------------------------
-- 表 获取字段信息

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetColumnInfo`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetColumnInfo`(
$_Id int,
$_ColumnName varchar(20))
COMMENT '获取字段信息'
BEGIN 
set @sqlStr=CONCAT('SELECT ',$_ColumnName , ' FROM <#= host.GetDALClass(host.TableName) #> WHERE Id= ',$_Id);
PREPARE count_stmt FROM @sqlStr;
EXECUTE count_stmt;
END //
DELIMITER ;

-- ------------------------------------------
-- 表 获取所有记录

DELIMITER //
DROP procedure IF EXISTS `proc_<#= host.GetDALClass(host.TableName) #>_GetList`;
CREATE PROCEDURE `proc_<#= host.GetDALClass(host.TableName) #>_GetList`()
COMMENT '获取所有记录'
BEGIN 
SELECT 
<# updateI=1;foreach (ColumnInfo c in host.Fieldlist)
{ #>
<#= c.ColumnName.ToString().ToLower()#><#if (updateI!=columnCount){#>,<#}#>
<#updateI++; } #>

FROM <#= host.GetDALClass(host.TableName) #>;

END //
DELIMITER ;

 

你可能感兴趣的:(MYSQL)