复杂的存储过程,高手请进!(on line waiting...)

good-code 2009-08-29 10:59:55
问题如下:
A表中有car_number,car_name,carTeam_number
B表中有carTeam_number,carTeam_name,carTeam_count
如何用存储过程 在删除A表中的car_number一条记录时,B表中的carTeam_count自动减少1

我的这个存储过程只要传入一个car_number参数就可以删除一条数据,但B表中的carTeam_count却没有减少 。
问题出在哪呢?谢谢各位赐教...
create PROCEDURE delcarinfo
@car_number nvarchar(50)
AS
delete from car_info where car_number=@car_number

declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber
...全文
93 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
good-code 2009-08-29
  • 打赏
  • 举报
回复
OK 明白! 谢谢你们...
netniule 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xustanly 的回复:]
引用 7 楼 wjmo520 的回复:
对啊



create PROCEDURE delcarinfo
@car_number nvarchar(50)
AS

declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
delete from  car_info where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber

先select再delete。
[/Quote]
删除了就找不到
xuStanly 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 mbh0210 的回复:]
用事务可以保证数据完整性,比如,更新完了,但是删除失败,那么事务会回滚的
,不会出现你已经减去1了,但是数据还没有删除的情况
[/Quote]



mbh0210 2009-08-29
  • 打赏
  • 举报
回复
用事务可以保证数据完整性,比如,更新完了,但是删除失败,那么事务会回滚的
,不会出现你已经减去1了,但是数据还没有删除的情况
qinyeya 2009-08-29
  • 打赏
  • 举报
回复
where car_number=@car_number 好像是查不到數據的,因為前面你已經刪除了
最好是把兩個表的關系貼出來,帶點示例數據
good-code 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xustanly 的回复:]
另外,涉及到多表操作,最好用上事务
SQL codecreatePROCEDURE delcarinfo@car_numbernvarchar(50)ASdeclare@nint,@mintdeclare@updateNumbernvarchar(32)begintranselect@updateNumber= carTeam_numberfrom Awhere car_number=@car_numberdeletefrom car_infowhere car_number=@car_numberset@n=@@errorupdate Bset carTeam_count=carTeam_count-1where carTeam_number=@updateNumberset@m=@@errorif@n=0and@m=0committranelserollbacktran

大概就是上面这个意思,我顺手写的。
[/Quote]
您说的用事务,那他的好处是什么?
good-code 2009-08-29
  • 打赏
  • 举报
回复
呵呵 谢谢各位 问题经已解决啦 原来是顺序错了
现在可以啦 。
mbh0210 2009-08-29
  • 打赏
  • 举报
回复
你先更新后删除


delete from car_info where car_number=@car_number

declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber

你已经删掉,在通过select @updateNumber = carTeam_number from A where car_number=@car_number 这条记录找数据,你觉得找的到吗?
应该是这样写
declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber

delete from car_info where car_number=@car_number

xuStanly 2009-08-29
  • 打赏
  • 举报
回复
另外,涉及到多表操作,最好用上事务
create PROCEDURE delcarinfo
@car_number nvarchar(50)
AS

declare @n int, @m int
declare @updateNumber nvarchar(32)

begin tran
select @updateNumber = carTeam_number from A where car_number=@car_number

delete from car_info where car_number=@car_number
set @n = @@error

update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber
set @m = @@error

if @n = 0 and @m = 0 commit tran
else rollback tran


大概就是上面这个意思,我顺手写的。
三楼の郎 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wjmo520 的回复:]
有先后顺序之分吗?

[/Quote]
当然,先Delete的话记录没有了,Select怎么还能查到东西!
good-code 2009-08-29
  • 打赏
  • 举报
回复
有先后顺序之分吗?
三楼の郎 2009-08-29
  • 打赏
  • 举报
回复
create PROCEDURE delcarinfo
@car_number nvarchar(50)
AS
declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
delete from car_info where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber
xuStanly 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wjmo520 的回复:]
对啊

[/Quote]

create PROCEDURE delcarinfo
@car_number nvarchar(50)
AS

declare @updateNumber nvarchar(32)
select @updateNumber = carTeam_number from A where car_number=@car_number
delete from car_info where car_number=@car_number
update B set carTeam_count=carTeam_count-1 where carTeam_number=@updateNumber

先select再delete。
good-code 2009-08-29
  • 打赏
  • 举报
回复
对啊
aspnet19851111 2009-08-29
  • 打赏
  • 举报
回复
xuStanly 2009-08-29
  • 打赏
  • 举报
回复
表A是不是就是car_info?
xuStanly 2009-08-29
  • 打赏
  • 举报
回复
表A和B以什么相关联?另外,最好给几行测试数据。
jiating520 2009-08-29
  • 打赏
  • 举报
回复
等待高手..
good-code 2009-08-29
  • 打赏
  • 举报
回复
怎么没人解答呢?
...
good-code 2009-08-29
  • 打赏
  • 举报
回复
是不是没有更新到B表中的carTeam_count字段值呢?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧