求一存储过程或sql语句
tab1: tab2:
col1 col2 col1 col2 col3
1 ab-stu-ba 1 stu 1
2 ab-stu-ba 2 tea 2
3 ab-tea-ba 3 par 3
4 ab-par-ba
想通过一存储过程将tab1变为:
col1 col2
1 ab-1-ba
2 ab-1-ba
3 ab-2-ba
4 ab-3-ba
请各位给解决以下
[解决办法]
if object_id( 'pubs..tab1 ') is not null
drop table tab1
go
create table tab1(col1 varchar(10),col2 varchar(10))
insert into tab1(col1,col2) values( '1 ', 'ab-stu-ba ')
insert into tab1(col1,col2) values( '2 ', 'ab-stu-ba ')
insert into tab1(col1,col2) values( '3 ', 'ab-tea-ba ')
insert into tab1(col1,col2) values( '4 ', 'ab-par-ba ')
go
if object_id( 'pubs..tab2 ') is not null
drop table tab2
go
create table tab2(col1 varchar(10),col2 varchar(10),col3 varchar(10))
insert into tab2(col1,col2,col3) values( '1 ', 'stu ', '1 ')
insert into tab2(col1,col2,col3) values( '2 ', 'tea ', '2 ')
insert into tab2(col1,col2,col3) values( '3 ', 'par ', '3 ')
go
update tab1
set col2 = left(tab1.col2,charindex( '- ',tab1.col2)) + tab2.col3 + reverse(left(reverse(tab1.col2),charindex( '- ',reverse(tab1.col2))))
from tab1,tab2
where substring(tab1.col2 , charindex( '- ',tab1.col2) + 1 , charindex( '- ',tab1.col2,charindex( '- ',tab1.col2)+1) - charindex( '- ',tab1.col2) - 1) = tab2.col2
select * from tab1
drop table tab1,tab2
/*
col1 col2
---------- ----------
1 ab-1-ba
2 ab-1-ba
3 ab-2-ba
4 ab-3-ba
(所影响的行数为 4 行)
*/