create table sjk1(xm varchar(10),gz1 int,gz2 int,gz3 int, zw char(2), id int identity(1,1))
insert sjk1 select 'ss',100,200,0,'aa'
union all select 'ss3',300,500,0,'aa'
union all select 'ss3',400,600,0,'aa'
union all select 'ss3',200,100,0,'bb'
union all select 'ss3',600,800,0,'bb'create table sjk2(id int identity(1,1),lb varchar(10),gs nvarchar(4000))
insert sjk2
select 'gz1',''
union all select 'gz2',''
union all select 'gz3','gz2+gz1 where zw=aa;gz2-gz1 where zw=bb'
declare @sql nvarchar(4000)
set @sql='update sjk1 set gz3= '
select @sql=@sql+replace(replace(gs,'aa','''aa'''),'bb','''bb''') from sjk2set @sql= replace(@sql,';',' update sjk1 set gz3= ')exec (@sql)
select * from sjk1/*
result:
xm gz1 gz2 gz3 zw id
---------- ----------- ----------- ----------- ---- -----------
ss 100 200 300 aa 1
ss3 300 500 800 aa 2
ss3 400 600 1000 aa 3
ss3 200 100 -100 bb 4
ss3 600 800 200 bb 5(5 row(s) affected)
*/drop table sjk1
drop table sjk2
insert sjk1 select 'ss',100,200,0,'aa'
union all select 'ss3',300,500,0,'aa'
union all select 'ss3',400,600,0,'aa'
union all select 'ss3',200,100,0,'bb'
union all select 'ss3',600,800,0,'bb'create table sjk2(id int identity(1,1),lb varchar(10),gs nvarchar(4000))
insert sjk2
select 'gz1',''
union all select 'gz2',''
union all select 'gz3','gz2+gz1 where zw=aa;gz2-gz1 where zw=bb'
declare @sql nvarchar(4000)
set @sql='update sjk1 set gz3= '
select @sql=@sql+replace(replace(gs,'aa','''aa'''),'bb','''bb''') from sjk2set @sql= replace(@sql,';',' update sjk1 set gz3= ')exec (@sql)
select * from sjk1/*
result:
xm gz1 gz2 gz3 zw id
---------- ----------- ----------- ----------- ---- -----------
ss 100 200 300 aa 1
ss3 300 500 800 aa 2
ss3 400 600 1000 aa 3
ss3 200 100 -100 bb 4
ss3 600 800 200 bb 5(5 row(s) affected)
*/drop table sjk1
drop table sjk2
解决方案 »
- 一条access 里的语句,麻烦帮我改写成 ms sqlserver 里面的语句
- 求sql如何把这些结果合并成一条记录
- 可以停掉扩展存储过程吗?
- 高分急求答案!sql2008 数据库创建分区表,用分区表查询比用源表查询慢,求解
- 符合某个条件的纪录有多个,我只想update最上面一条数据,请问如何写?
- 大批数据导出时,出现一个莫名其妙的错误,各位高手帮我瞧瞧
- 如何获得SQL-SERVER的用户名、密码???
- 各位帮忙看看,如何返回指定的结果集合。
- 数据量大的表转移到另一个表中有什么好的方法?
- 如何用C++编写代码将一文本文件(有固定格式)写入SQL SERVER数据库
- 请问如何在各个字段中查找符合条件的记录?
- 如何判断一个存储过程的最终结果返回的是一行数据还是多行数据?
select @where=gs+';' from sjk2 where lb='gz3'
while charindex(';',@where)>0
begin
set @sql='update sjk1 set gz3='+left(@where,charindex(';',@where))
exec(@sql)
set @where=stuff(@where,1,charindex(';',@where),'')
end