1. 程式人生 > >【動軟】批量生成mysql資料庫儲存過程的模板

【動軟】批量生成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 ;