请教为啥不执行?
create procedure fzbb @from varchar(30),@unit varchar(30),@tb varchar(30),@zt varchar(10),@last_unit varchar(10),@last_zt varchar(10)
as
begin
declare @str varchar(200)
set @str='select * into b'+@tb+' from '+@from+'..b'+@tb
exec(@str)
set @str='select * into s'+@tb+' from '+@from+'..s'+@tb
exec(@str)
set @str='delete from s'+@tb+' where funit<>'+@last_unit
exec(@str)
set @str='update s'+@tb+' set funit='''+@unit+''''
exec(@str)
set @str='alter table s'+@tb+' add gongshi varchar(225)'
exec(@str)
set @str='update s'+@tb+' set gongshi=FText'
select @str --这一句显示"update s998 set gongshi=FText",拷出来单独执行没问题
exec(@str) --这一句为啥显示执行了,有影响数,但表里面却没有赋值
/*
set @str='alter table s'+@tb+' drop column ftext'
exec(@str)
set @str='sp_rename N''s'+@tb+'.gongshi'',N''ftext'',''column'''
exec(@str)
set @str='update s'+@tb+' set ftext=replace(ftext,'','+@last_zt+','','','+@zt+','')'
exec(@str)
set @str='update s'+@tb+' set ftext=replace(ftext,'','+@last_zt+')'','','+@zt+')'')'
exec(@str)
set @str='alter table '+@tb+' alter column ftext text'
exec(@str)
*/
end
go
--执行过程
declare @from varchar(30),@unit varchar(30),@tb varchar(30),@zt varchar(10),
@fl varchar(3),@dw varchar(40),@last_unit varchar(10),@last_zt varchar(10)
set @from='ASDB'
set @tb='998'
set @unit='01'
set @dw='2013新民政报表'
set @zt='01'
set @last_unit='01'
set @last_zt='01'
set @fl='001'
exec fzbb @from,@unit,@tb,@zt,@last_unit,@last_zt
s998表结构:
FRow
FCol
FUnit
FText
gongshi
想通过执行update s998 set gongshi=FText给新加的gongshi列赋值,为啥放在存储过程里面无效?
------解决方案--------------------gongshi的定义是varchar(225),你在赋值的时候, FText 要用单引号括起来.
好好的一个存储过程,都靠拼接来凑,到底图的啥?