• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

怎么写个存储过程对应B表更新A表.

xp999 2008-02-29 09:21:53
B表保存的是卡的块数据,,,比如是
startcard : 100001
endcard : 100100
共99张卡

而A表保存的是卡号:
cardnumber 已销售
100001 0
100002 0
100003 0
...
这些,

如果B表保存了的卡段就更新A表的已销售(表示卡已出)..怎么写这个存储过程?因为B表保存的记录不止一条
...全文
87 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dawugui 2008-02-29
--假设你需要的是C表的proxyname中的'一级代理商'
update A set 一级代理商ID = B.proxyID
from A,B,C where charindex('一级代理商',proxyname) > 0 and b.proxyID = c.proxyID and a.CARDNUMBER >= b.startcard and a.CARDNUMBER <= b.endcard

--假设你需要的是C表的faterid = 0
update A set 一级代理商ID = B.proxyID
from A,B,C where c.faterid = 0 and b.proxyID = c.proxyID and a.CARDNUMBER >= b.startcard and a.CARDNUMBER <= b.endcard
回复
xp999 2008-02-29
记录已经存在....所以不需要自动触发器....
回复
xp999 2008-02-29
A表结构 卡表
ID CARDNUMBER(卡号) 一级代理商ID 二级代理商ID
1 100001
2 100002
3 100003
4 100004
5 100005

....
B表提卡记录表
stockID startcard(开始段) endcard(结束段) cardtotal(总数) proxyID(提货的代理商,一级)
1 100001 100100 99 1
2 100101 100200 99 1
3 100401 101000 599 2
4 101001 101999 999 2
...
C表,代理商表

ProxyID ProxyName faterid
1 一级代理商1 0
2 一级代理商2 0
3 二级代理1 1
4 二级代理 1


我现在是想由B表的提卡记录,,,将A表的一级代理商ID更新为B表的.
请问怎么写存储过程???因为B表的数据很多条,手动更新很烦
回复
山之魂2 2008-02-29
对于楼主的要求,我觉得他需要的是一个触发器,而不是过程,因为过程不能自动执行.
应该在B表上建触发器,使A表跟着更新
回复
dawugui 2008-02-29
那你得把具体的情况写出来.
回复
xp999 2008-02-29
一楼的语句可不可以再加几个WHERE条件的?
因为我B表的数据不是一个代理商的(分一级代理,二级代理等,都是保存在B表).?
回复
dawugui 2008-02-29
说明一下:
如果只是这个要求,直接用1的语句就行了,不需要存储过程.

如果确实要用存储过程,如2楼取出最大,最小值后调用存储过程即可.
也可如下:

CREATE PROCEDURE my_proc 
AS
begin
update A
set 已销售 = 0
from A,
(select min(cardnumber) min_cardnumber,max(cardnumber) max_cardnumber from B) T
where A.cardnumber >= T.min_cardnumber and A.cardnumber <= T.max_cardnumber
end
GO

exec my_proc
回复
$扫地僧$ 2008-02-29
create table A
(
startcard varchar(10),
endcard varchar(10)
)

create table B
(
cardnumber varchar(10),
已销售 bit
)

insert A select '100001','100100'

insert B select '100001',1
insert B select '100002',1
insert B select '100003',1


update B set 已销售=1
from B where cardnumber between (select min(startcard) from A ) and (select max(endcard) from A )

select * from B
回复
dawugui 2008-02-29
--以下是存储过程的写法.

CREATE PROCEDURE my_proc
@startcard varchar(20),
@endcard varchar(20)
AS
begin
update A
set 已销售 = 0
where A.cardnumber >= @startcard and A.cardnumber <= @endcard
end
GO

exec my_proc '100001','100100'
回复
dawugui 2008-02-29
update A
set 已销售 = 0
from A,
(select min(cardnumber) min_cardnumber,max(cardnumber) max_cardnumber from B) T
where A.cardnumber >= T.min_cardnumber and A.cardnumber <= T.max_cardnumber
回复
xp999 2008-02-29
谢谢乌龟,,,已经解决
回复
xp999 2008-02-29
对charindex的用法不是很明白..-_-!
charindex('一级代理商',proxyname)的一级代理商是那个表的字段?
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-29 09:21
社区公告
暂无公告