自动生成对数据表进行更新操作的存储过程的存储过程

create procedure sp_GenUpdate
/*
    功能描述:自动生成对数据表进行更新操作的存储过程的存储过程
*/

(
    @TableName varchar(
130 ),     -- 数据表名称
    @PrimaryKey varchar(
130 ),     -- 数据表的主键
    @ProcedureName varchar(
130 )     -- 生成的更新操作存储过程名称
)
as
set  nocount on
declare @maxcol 
int ,
@TableID 
int
set  @TableID  =  object_id(@TableName)
select @MaxCol 
=  max(colorder)
from syscolumns
where  id  =  @TableID
select 
' Create Procedure  '    rtrim(@ProcedureName)  as  type, 0   as  colorder into #TempProc
union
select convert(
char ( 35 ), ' @ '    syscolumns.name)
  rtrim(systypes.name)
  
case  when rtrim(systypes.name)  in  ( ' binary ' , ' char ' , ' nchar ' , ' nvarchar ' , ' varbinary ' , ' varchar ' ) then  ' ( '    rtrim(convert( char ( 4 ),syscolumns.length))    ' ) '  
when rtrim(systypes.name) not 
in  ( ' binary ' , ' char ' , ' nchar ' , ' nvarchar ' , ' varbinary ' , ' varchar ' ) then  '   '
end
  
case  when colorder  <  @maxcol then  ' , '  
when colorder 
=  @maxcol then  '   '
end
as  type,
colorder
from syscolumns
join systypes on syscolumns.xtype 
=  systypes.xtype
where  id  =  @TableID and systypes.name  <>   ' sysname '
union
select 
' AS ' ,@maxcol    1   as  colorder
union
select 
' UPDATE  '    @TableName,@maxcol    2   as  colorder
union
select 
' SET ' ,@maxcol    3   as  colorder
union
select syscolumns.name   
'  = @ '    syscolumns.name
  
case  when colorder  <  @maxcol then  ' , '  
when colorder 
=  @maxcol then  '   '
end
as  type,
colorder   @maxcol   
3   as  colorder
from syscolumns
join systypes on syscolumns.xtype 
=  systypes.xtype
where  id  =  @TableID and syscolumns.name  <>  @PrimaryKey and systypes.name  <>   ' sysname '
union
select 
' WHERE  '    @PrimaryKey    '  = @ '    @PrimaryKey,( 2   *  @maxcol)    4   as  colorder
order by colorder
select type from #tempproc order by colorder
drop table #tempproc
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值