存储过程流程控制求助,代码见内,希望大虾们帮助。 (100分)

  • 主题发起人 主题发起人 guilinlzy
  • 开始时间 开始时间
G

guilinlzy

Unregistered / Unconfirmed
GUEST, unregistred user!
/*检查在同一天内某车是否能派车,关联表TbAtuoDispatchBill和TbAutoDispatchNote */
//在同一天的所有派车单中,同一辆车,派车(AutoDispatchNote_DispatchType_Id)“0”与“1”互斥,且不能重复
//在同一天的所有派车单中,某辆车(用AutoDispatchNote_Auto_Id标志),若已做了“0“或“1”派车,
可再做一次“2“派车
//做了“2“派车就不能再次派车
*/
CREATE procedure CheckCanDispatch_Sp(
@AutoDispatchNote_Auto_Id nchar(3),////车号
@AutoDispatchNote_DispatchType_Id nchar(1),////“0”—普通派车, “1”—追加派车, “2”—套接派车
@AutoDispatchBill_AutoUsageYear nchar(4),
@AutoDispatchBill_AutoUsageMonth nchar(2),
@AutoDispatchBill_AutoUsageDay nchar(2),
@return nvarchar(20) output
) as
/*生成同一天派车*/
select AutoDispatchBill_Id into #tempTb1
from TbAtuoDispatchBill
where AutoDispatchBill_AutoUsageYear = @AutoDispatchBill_AutoUsageYear and
AutoDispatchBill_AutoUsageMonth = @AutoDispatchBill_AutoUsageMonth and
AutoDispatchBill_AutoUsageDay = @AutoDispatchBill_AutoUsageDay

/*这里检索出了所有的派车车号和派车类型所组成的临时表*/
select AutoDispatchNote_Auto_Id,AutoDispatchNote_DispatchType_Id into #tempTb2
from TbAutoDispatchNote inner join tempTb1
on TbAutoDispatchNote.AutoDispatchNote_AutoDispatchBill_Id =
tempTb1.AutoDispatchBill_Id

/*在这如何展开下去呢,请指教,谢谢*/
GO
 
分类别算
if @AutoDispatchNote_DispatchType_Id ="1" then
select * Form a where chihao=@AutoDispatchNote_Auto_Id
and AutoDispatchNote_DispatchType_Id = 1

else if @AutoDispatchNote_DispatchType_Id ="0" then
select * Form a where chihao=@AutoDispatchNote_Auto_Id
and AutoDispatchNote_DispatchType_Id = 0
else
select * Form a where chihao=@AutoDispatchNote_Auto_Id
and AutoDispatchNote_DispatchType_Id <> 2
我觉得这样就行了为什么还要上面那么麻烦?????

 
这是设计人员要求如此的,我也觉得这个很罗嗦,:(
 
不是啊我觉得这样已经实现你的要求了啊
 
同意楼上的这样已经实现你的要求了(_)
 
不行,可能是大家还没有完全理解好我的意图,现在我的调整如下,大家看看:
/*检查某车是否能派车*/
CREATE procedure CheckCanDispatch_Sp(
@AutoDispatchNote_Auto_Id nchar(3),
@AutoDispatchNote_DispatchType_Id nchar(1),
@AutoDispatchBill_AutoUsageYear nchar(4),
@AutoDispatchBill_AutoUsageMonth nchar(2),
@AutoDispatchBill_AutoUsageDay nchar(2),
@return nvarchar(20) output
) as

declare @totalCount int

select AutoDispatchBill_Id into #tempTb1
from TbAtuoDispatchBill
where AutoDispatchBill_AutoUsageYear = @AutoDispatchBill_AutoUsageYear and
AutoDispatchBill_AutoUsageMonth = @AutoDispatchBill_AutoUsageMonth and
AutoDispatchBill_AutoUsageDay = @AutoDispatchBill_AutoUsageDay

select AutoDispatchNote_DispatchType_Id into #tempTb2
from TbAutoDispatchNote inner join tempTb1
on TbAutoDispatchNote.AutoDispatchNote_AutoDispatchBill_Id =
tempTb1.AutoDispatchBill_Id and
TbAutoDispatchNote.AutoDispatchNote_Auto_Id = @AutoDispatchNote_Auto_Id

select @totalCount = count(*) from tempTb2

if (@totalCount=0)
begin
select @return = 'S_OK'
return
end

declare @count1 int
declare @count2 int
if (@totalCount = 1)
begin
if (@AutoDispatchNote_DispatchType_Id = 0 or @AutoDispatchNote_DispatchType_Id =1 )
select @return = 'F_Note_NotCustomaryDispatchAgain'
return

if (@AutoDispatchNote_DispatchType_Id = 2)
begin
select @count1 = count(*) from tempTb2 where
AutoDispatchNote_DispatchType_Id = 2

if (@count1=1)
select @return = 'F_Note_NotSupplementalDispatchAgain'
return
end

if (@AutoDispatchNote_DispatchType_Id = 2)
begin
select @count2 = count(*) from tempTb2 where
AutoDispatchNote_DispatchType_Id = 0 or
AutoDispatchNote_DispatchType_Id = 1

if (@count1=1)
select @return = 'S_OK'
return
end

end

if (@totalCount >= 2)
begin
select @return = 'F_Note_NotDispatchAgain'
return
end

GO
 
顺便再问一个问题,呵呵
我想更新表TbAutoDispatchNote中满足(AutoDispatchNote_Code > @AutoDispatchNote_Code )
的所有记录,该如何?
update TbAutoDispatchNote
set AutoDispatchNote_Code = AutoDispatchNote_Code - 1
where AutoDispatchNote_AutoDispatchBill_Id = @AutoDispatchNote_AutoDispatchBill_Id
and AutoDispatchNote_Code > @AutoDispatchNote_Code
 
如果也得满足这个字段的话AutoDispatchNote_AutoDispatchBill_Id
你的更新是对的
还有上面的派车那个为什么一定要用临时表?
最好还是把你需求说一下吧!
 
就是这个啊,更新是我让人给愚弄说不行,所以......
/*检查在同一天内某车是否能派车,关联表TbAtuoDispatchBill和TbAutoDispatchNote */
//在同一天的所有派车单中,同一辆车,派车(AutoDispatchNote_DispatchType_Id)“0”与“1”互斥,且不能重复
//在同一天的所有派车单中,某辆车(用AutoDispatchNote_Auto_Id标志),若已做了“0“或“1”派车,
可再做一次“2“派车
//做了“2“派车就不能再次派车
对于需求,看了我后面更新过的,你应该明白了吧?

用临时表是考虑到资源消耗的问题,
 
其实我觉得这些都可以用一句SQL表示啊,关键是你的字段太长了我都懒得写了:)
应该不难啊
 
OK,如果谁还有兴趣,可以对我写的进行优化,等两天在散分。
 
忘记结了,不好意思。
 
后退
顶部