--建立通用存储过程
create proc my_proc(
@tbName sysname,--表名
@columns varchar(500),--字段名,用","隔开.如'a,b'
@values varchar(5000),--字段的更新值,必须要上面的字段列表一一对应,用","隔开.注意,不管值是什么类型都不必单独加单引号,直接写在一个单引号下面如:'12,sab'
@where varchar(1000)=null--where条件.如:"a=3".只支持单表更新.不支持多表关联后更新.
)
as
declare @sql varchar(8000),@tempColumn varchar(50),@tempValue varchar(500)
select @sql='',@tempColumn='',@tempValue=''
while(charindex(',',@columns)>0)
begin
set @tempColumn=substring(@columns,1,charindex(',',@columns)-1)
set @tempValue=substring(@values,1,charindex(',',@values)-1)
set @sql=@sql+','+@tempColumn+'='''+@tempValue+''''
set @columns=stuff(@columns,1,charindex(',',@columns),'')
set @values=stuff(@values,1,charindex(',',@values),'')
end
set @tempColumn=@columns
set @tempValue=@values
set @sql=@sql+','+@tempColumn+'='''+@tempValue+''''
set @sql='update '+@tbName+stuff(@sql,1,1,' set ')+' where '+isnull(@where,'1=1')
exec(@sql)
----------------测试
--建立测试表
create table test(a int,b varchar(10),c int)
insert into test select 1,'woaini',3
--测试
select * from test
exec my_proc 'test','a,b','12,xiashuo','1=1'
select * from test
--结果
a b c
----------- ---------- -----------
1 woaini 3
(所影响的行数为 1 行)
(所影响的行数为 1 行)
a b c
----------- ---------- -----------
12 xiashuo 3
(所影响的行数为 1 行)
--删除测试
drop table test
drop proc my_proc
通用存储过程代码
最新推荐文章于 2022-09-07 16:30:56 发布