根据传入的两个参数,做分隔更新数据库中的值。
2015-09-04 09:49
316 查看
alter proc p_update_u_road_trans_c_sendstatus (@comText varchar(8000))
as
begin
create table #tb(transportNo varchar(20),billno varchar(20),status char(1));
--set @comText='150830001001:1508250094=1,1508250101=1,1508290024=1;150830001002:1508270246=1,1508270249=1,1508270267=1';
set nocount on;
declare @semicolonlast int,@semicolonCurrent int;
declare @colonlast int,@colonCurrent int;
declare @singleCmdText varchar(8000);
declare @transportNo varchar(20),@SetCmdText varchar(4000);
declare @commalast int,@commaCurrent int;
declare @lastCmdText varchar(100);
declare @billno varchar(20),@status char(1);
set @semicolonlast=0;
while 1=1
begin
set @semicolonCurrent=CHARINDEX(';',@comText,@semicolonlast);
if @semicolonCurrent>0
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,@semicolonCurrent-@semicolonlast);
else
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,LEN(@comText)-@semicolonlast+1);
set @semicolonlast=@semicolonCurrent+1;
set @colonCurrent=CHARINDEX(':',@singleCmdText);
set @transportNo=SUBSTRING(@singleCmdText,0,@colonCurrent);
set @SetCmdText=SUBSTRING(@singleCmdText,@colonCurrent+1,LEN(@singleCmdText)-@colonCurrent);
set @commalast=0;
while 1=1
begin
set @commaCurrent=CHARINDEX(',',@SetCmdText,@commalast);
if @commaCurrent=0
set @lastCmdText=SUBSTRING(@SetCmdText,@commalast,LEN(@SetCmdText)-@commalast+1);
else
set @lastCmdText=SUBSTRING(@SetCmdText,@commalast ,@commaCurrent-@commalast);
set @commalast=@commaCurrent+1;
set @billno=SUBSTRING(@lastCmdText,0,LEN(@lastCmdText)-1);
set @status=RIGHT(@lastCmdText,1);
insert #tb(transportNo,billno,status)values(@transportNo,@billno,@status);
if @commaCurrent=0
break;
end
if @semicolonCurrent=0
break;
end
update c set sendstatus=b.status from u_road_trans_c c inner join #tb b on c.billno=b.billno and c.transno=b.transportNo;
if @@ROWCOUNT=0
begin
raiserror('更新失败!',16,1);
return;
end
end
as
begin
create table #tb(transportNo varchar(20),billno varchar(20),status char(1));
--set @comText='150830001001:1508250094=1,1508250101=1,1508290024=1;150830001002:1508270246=1,1508270249=1,1508270267=1';
set nocount on;
declare @semicolonlast int,@semicolonCurrent int;
declare @colonlast int,@colonCurrent int;
declare @singleCmdText varchar(8000);
declare @transportNo varchar(20),@SetCmdText varchar(4000);
declare @commalast int,@commaCurrent int;
declare @lastCmdText varchar(100);
declare @billno varchar(20),@status char(1);
set @semicolonlast=0;
while 1=1
begin
set @semicolonCurrent=CHARINDEX(';',@comText,@semicolonlast);
if @semicolonCurrent>0
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,@semicolonCurrent-@semicolonlast);
else
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,LEN(@comText)-@semicolonlast+1);
set @semicolonlast=@semicolonCurrent+1;
set @colonCurrent=CHARINDEX(':',@singleCmdText);
set @transportNo=SUBSTRING(@singleCmdText,0,@colonCurrent);
set @SetCmdText=SUBSTRING(@singleCmdText,@colonCurrent+1,LEN(@singleCmdText)-@colonCurrent);
set @commalast=0;
while 1=1
begin
set @commaCurrent=CHARINDEX(',',@SetCmdText,@commalast);
if @commaCurrent=0
set @lastCmdText=SUBSTRING(@SetCmdText,@commalast,LEN(@SetCmdText)-@commalast+1);
else
set @lastCmdText=SUBSTRING(@SetCmdText,@commalast ,@commaCurrent-@commalast);
set @commalast=@commaCurrent+1;
set @billno=SUBSTRING(@lastCmdText,0,LEN(@lastCmdText)-1);
set @status=RIGHT(@lastCmdText,1);
insert #tb(transportNo,billno,status)values(@transportNo,@billno,@status);
if @commaCurrent=0
break;
end
if @semicolonCurrent=0
break;
end
update c set sendstatus=b.status from u_road_trans_c c inner join #tb b on c.billno=b.billno and c.transno=b.transportNo;
if @@ROWCOUNT=0
begin
raiserror('更新失败!',16,1);
return;
end
end
相关文章推荐
- 【翻译自mos文章】对于JDBC thin client连接,ORA-28040 and SQLNET.ALLOWED_LOGON_VERSION_CLIENT
- SQL-mysql设置utf8编码方法
- 在Ubuntu中安装Redis
- 好用的PL/SQL Developer相关设置
- 【翻译自mos文章】怎么正确的使用SQLNET.ALLOWED_LOGON_VERSION参数
- oracle数据恢复:利用ctl,dbf,log
- MySQL存储过程之细节
- 11月导入数据库记录(oracle)
- Oracle 10G 服务未启动
- Oracle中的分页存储过程
- 欢迎使用CSDN-markdown编辑器
- 通过SQL语句直接实现Excel与数据库的导入导出
- mac下安装memcached
- MySQL 锁
- vs2010调试sql2008存储过程
- MongoDB学习十三 --MongoDB的Java增删除改查
- mysql主从同步配置
- 把一个一中的字段更新另一个表中的t-sql
- 缓存算法及Redis、Memcached、Guava、Ehcache中的算法
- CentOS7安装Oracle_jdk7