【发布时间】:2020-04-07 04:33:05
【问题描述】:
我正在尝试更新我们的运输订单的状态。它可以编译,但执行过程时没有返回任何状态。
ALTER PROCEDURE [Shipping].[UpdateShippingStatus_ERICA]
@OrderID int = 0
AS
BEGIN
declare @ShipStatus int = 0
declare @TagsVerified varchar(10)
declare @TagCount int
declare @Cash Varchar
declare @Payment int
declare @VehicleType varchar(10)
declare @LoadedUnits varchar
declare @LoadedWeight int
select @TagCount = count(TGTAGID) from [IBM].[S10F8DCP].SALFIL.TAGCUR where TGORDER = @OrderID
select @TagsVerified = Y6PRS09, @VehicleType = Y6CAR, @LoadedUnits = Y6PRS09, @LoadedWeight = Y6WGROSS
from [IBM].[S10F8DCP].SALFIL.SORDHAD where Y6ONO = @OrderID
select @Cash = OHOCSH, @Payment = OHCASH from [IBM].[S10F8DCP].SALFIL.SORDH a where OHONO = @OrderID
Select @ShipStatus =
(Case
When @ShipStatus = 3 and @Cash = 'N' and @TagsVerified like '%Y%' and @TagCount = (select a.TagsLoaded from sales.IBM.OrdersShipping a where a.OrderID = @OrderID)
Then 4
When @ShipStatus = 3 and @Cash = 'Y' and @Payment > '0' and @TagsVerified like '%Y%' and @TagCount = (select a.TagsLoaded from sales.IBM.OrdersShipping a where a.OrderID = '35632')
Then 4
When @ShipStatus = 2 and @LoadedUnits > '0' and @LoadedWeight > '0'
Then 3
When @ShipStatus = 1 and @VehicleType = 'VAN' and exists(select * from [IBM].[S10F8DCP].SALFIL.TRINSP where Y7ONO = @OrderID)
Then 2
When exists(select * from [IBM].[S10F8DCP].SALFIL.SORDHAD where Y6LDDATE > '0' and Y6CAR <> 'VAN' and Y6ONO = @OrderID)
Then 2
When exists(select * from [IBM].[S10F8DCP].SALFIL.SORDHAD where Y6LDDATE > '0' and Y6CAR = 'VAN' and Y6ONO = @OrderID)
Then 1
End)
FROM sales.IBM.OrdersShipping a
join [IBM].[S10F8DCP].SALFIL.SORDHAD b on b.Y6ONO = a.OrderId
join [IBM].[S10F8DCP].SALFIL.SORDH c on c.OHONO = b.Y6ONO
join [IBM].[S10F8DCP].SALFIL.TAGCUR d on d.TGORDER = c.OHONO
where OrderID = @OrderID
Update sales.ibm.ordersshipping
set sales.ibm.ordersshipping.ShippingStatus =
(Case
When @ShipStatus = 1 Then 'READYINSP'
When @ShipStatus = 2 Then 'READYLOAD'
When @ShipStatus = 3 Then 'READYSCAN'
When @ShipStatus = 4 Then 'READYSHIP'
END)
where OrderID = @OrderID
END
GO
【问题讨论】:
-
你没有返回任何状态是什么意思?您没有任何返回数据集或
OUTPUT参数的SELECT语句,因此不确定您期望“返回”什么。 -
我终于想通了...这是有效的代码。
-
为什么你有所有这些变量?你没有使用它们中的大多数。你可以大大简化这个逻辑。此外,永远不要声明没有大小的 varchar !!! sql server 中的绝对值很少,但这是其中之一。它将使用默认大小。并且默认大小会因变量和参数而异,这些变量和参数会让你发疯。 sqlblog.org/2009/10/09/…
-
据我所知,您的案例表达式中的前 4 个案例都是毫无意义的(
when @ShipStatus = 3 and ...等),您最初将其声明为 0,并且不要修改它,所以此时它始终为 0,因此它为 1、2 或 3 的情况永远不会成立。我还认为您的所有 3 个联接都是多余的,但我不能确定这一点。 -
感谢大家的反馈 :) 学习时真的很感激。我做了更改:)
标签: sql-server case insert-update