运行该模板时,只需要选择单个表即可。
申明:该系列案例已通过CodeSmith Professional 5.0.1 Revision 4983版本的测试,以及生成的存储过程是针对MS Sqlserver。
操作说明 :运行CodeSmith Studio工具 ,创建Blank Template,并将文件名命名为:Update Proc.cst。
输入以下代码:
<%@ CodeTemplate Language="C#" TargetLanguage="T-SQL" Src="" Inherits="" Debug="False" LinePragmas="True" Description="根据表生成修改的存储过程" ResponseEncoding="UTF-8"%>
<%@ Property Name="TableName" Type="SchemaExplorer.TableSchema" Default="" Optional="False" Category="" Description="请选择需要生成存储过程的表" OnChanged="" Editor="" EditorBase="" Serializer="" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
------------------------------------
--说明:<%=TableName%>表的修改存储过程
--时间:<%= DateTime.Now %>
--技术支持:时间太快了
--邮箱地址:amwggyy504@163.com
--文章来源:http://amwggyy504.cnblogs.com
------------------------------------
<%
string StrWhere="";//修改条件
string SetValues="";//修改的值 。
string Param="";//传入的参数。
foreach(ColumnSchema Column in TableName.Columns)
{
SetValues+="["+Column.Name+"]"+"=@"+Column.Name;
Param+="@"+Column.Name+" " + Column.NativeType;
switch(Column.DataType)
{
case DbType.Decimal:
{
Param+="("+Column.Precision+","+Column.Scale+")";
break;
}
case DbType.Int32:
{
break;
}
case DbType.DateTime:
{
break;
}
default:
{
if(Column.Size>0)
Param+="("+Column.Size+")";
break;
}
}
if(Column.Name!=TableName.Columns[TableName.Columns.Count-1].Name)
{
SetValues+=",\n";
Param+=",\n";
}
}
for (int i=0;i<TableName.PrimaryKey.MemberColumns.Count; i++)
{
if (i>0) {
StrWhere+=" And " ;
}
StrWhere+="["+TableName.PrimaryKey.MemberColumns[i].Name +"]=@"+ TableName.PrimaryKey.MemberColumns[i].Name;
}
%>
Create Proc Proc_<%=TableName.Name%>_Update
<%=Param%>
As
Update <%=TableName.Name%>
Set <%=SetValues %>
Where <%=StrWhere %>