日期:2014-05-18  浏览次数:20538 次

求一存储过程或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 行)

*/