欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql清空表数据后重新添加数据存储过程的示例

程序员文章站 2023-10-20 11:08:56
复制代码 代码如下:alter procedure [dbo].[sp_add_jurisdiction]@ctablename varchar(20), --当前要删除、...

复制代码 代码如下:

alter procedure [dbo].[sp_add_jurisdiction]
@ctablename varchar(20), --当前要删除、新增的表
@filedkeyvalue varchar(20), --要删除的字段值
@filedname varchar(20), --要删除的字段名
@filednameadd1 varchar(20), --要新增的字段名1
@filednameadd2 varchar(20), --要新增的字段名2
@sql varchar(6000) --新增值字符串,如:25,30;25,31
as
begin
declare @strsql_1 varchar(6000) -- 删除
declare @strsql_2 varchar(6000) -- 新增
begin try
begin transaction
set @strsql_1 = 'delete from ['+@ctablename+'] where '+@filedname+' = '+@filedkeyvalue+''
exec(@strsql_1)

declare @run bit --继续循环的标志
declare @dotindex as int
declare @doindex as int
declare @strvalue1 as varchar(100)
declare @strvalue2 as varchar(100)
declare @strtext as varchar(100)
declare @returnvalue int
set @run = 1
set @returnvalue=0;
while( @run = 1)
begin
if(len(@sql)>0) --如果字符串还不为空,则进行一下操作
begin
set @dotindex=charindex(';',@sql)
if(@dotindex = 0) --判断是否找到了';'符号
begin
set @doindex=charindex(',',@sql)
set @strvalue1 = substring(@sql,1,@doindex-1)
set @strvalue2 = substring(@sql,@doindex+1,len(@sql))
set @strsql_2 = 'insert into ['+@ctablename+'] ('+@filedname+','+@filednameadd1+','+@filednameadd2+') values ('+@filedkeyvalue+','+@strvalue1+','+@strvalue2+')'
exec(@strsql_2);
set @returnvalue=@returnvalue+1;
set @run=0
end;
else
begin
set @strtext = substring(@sql,1,@dotindex-1) --截取','前的字符串
set @sql=substring(@sql,@dotindex+1,len(@sql)) --把字符串的长度缩短至后一个
set @doindex=charindex(',',@strtext)
set @strvalue1 = substring(@strtext,1,@doindex-1)
set @strvalue2 = substring(@strtext,@doindex+1,len(@strtext))
set @strsql_2 = 'insert into ['+@ctablename+'] ('+@filedname+','+@filednameadd1+','+@filednameadd2+') values ('+@filedkeyvalue+','+@strvalue1+','+@strvalue2+')'
exec(@strsql_2)
set @returnvalue=@returnvalue+1;
end
end
else
begin
set @run=0
set @returnvalue=@returnvalue+1;
end
end
commit transaction
return @returnvalue;
end try
begin catch
set @returnvalue=0;
rollback transaction
return @returnvalue;
end catch
end