新手求助!急。。
resource表中的lbbm字段为 '03-09-01'
我要将lbbm字段数据中的“-”去掉,后放到tab1表的code字段中,并统计 “-”的次数+1放到tab1表的lbnum字段中。是sql server的请帮忙写一下这条update语句,非常感谢!
这个是关联表的批量更新,可以参考下:
http://www.cnblogs.com/downmoon/archive/2007/12/29/1019832.html
create table [resource]
(pkid int identity(1,1),
lbbm nvarchar(20),
other int
)
go
insert [Resource]
select '03-09-01',cast(ceiling(rand() * 100) as int)
union all
select '05-06-07',cast(ceiling(rand() * 100) as int)
select * from [Resource]
create table [tab1]
(pkid int identity(1,1),
code nvarchar(20),
lbnum int
)
go
insert tab1
select '',0
union all
select '',0
select * from tab1
update tab1 set code=replace(r.lbbm,'-',''),
lbnum=len(r.lbbm)-len(replace(r.lbbm,'-','')-1)
from [Resource] r inner join tab1 t on r.pkid=t.pkid
select * from tab1
--结果
--pkid code lbnum
--1 030901 3
--2 050607 3
嗯...用代码实现的话,就好写多了。
如果你必须在SQL上实现的话:
1、首先定义自定义函数〔处理03-09-01这样的数据称为030901、处理-的个数+1〕
2、update tab1 set tab1.code= 自定义函数(a.lbbm) ,tab1.lbnum= 自定义函数(a.lbbm) from resource a where a.id=tab1.id
如果不是程序需要进程重复性的这种操作(比如就是更新一批数据),还是推荐写个程序更新得了。
declare @str varchar(10)
set @str='03-09-01'
select replace(@str,'-',''),len(@str)-len(replace(@str,'-','')-1)
上面是例子
update tab
set code=replace(a.colname,'-',''),lbnum=len(a.colnam)-len(replace(a.colname,'-','')-1)
from resource a
where ....
你的语句应该是类似这个的。
用Linq或数据集处理吧,你这个要处理的数据量应该不小吧,SQL完成一行都要好多句代码,跑起来会很慢的。