我有一个存储过程,根据特定的条件返回一个整数1或0。它目前使用三个选择语句,并将在多个位置被多个用户大量使用。必须有一个更有效的方式来做到这一点。较便宜的查询?
简而言之,查询首先检查订单上的所有清单项是否已完成(单独的表),然后检查名为BreakOutGuest的字段(位字段)是否为1或0.根据结果它会检查总客人数是否大于0且订单总数为零。它在所有这些标准上返回一个或零。有没有更有效的方法来做到这一点?临时表,所以我只需要打一次实际的表?以下是代码。
@ORDERID INT
AS
BEGIN
DECLARE @AUTO_CLOSE INT
SET NOCOUNT ON;
--If all checklist items are marked complete move on, if not set @AUTO_CLOSE=0
IF NOT EXISTS(SELECT ORDERID FROM dbo.orderchecklistitems WHERE [email protected] AND CompletedON IS NULL)
BEGIN
--if BreakOutGuestFees is 1 only sum Guest_Count_1 + Guest_Count_2
IF EXISTS(SELECT * FROM dbo.Orders WHERE (GuestCount_1 + GuestCount_2)>1 AND OrderTotal=0 AND BreakoutGuestFees=1)
BEGIN
SET @AUTO_CLOSE=1
END
ELSE
SET @AUTO_CLOSE=0
--if BreakOutGuestFees is 0 only consider Guest_Count_1
IF EXISTS(SELECT * FROM dbo.Orders WHERE (GuestCount_1)>1 AND OrderTotal=0 AND BreakoutGuestFees=0)
BEGIN
SET @AUTO_CLOSE=1
END
ELSE
SET @AUTO_CLOSE=0
END
ELSE
SET @AUTO_CLOSE=0
END
你是不是遗漏了'OrderID'搜索在其他两个访问'订单'表?为什么这不只是一个返回'1'或'0'的'select'? – Luaan 2015-02-23 17:44:19
是的,我是。我在公开论坛上发布了实际存储过程以删除敏感信息,并且意外地删除了第二个选择语句中的“和[email protected]”子句,但它在那里。 – Michael 2015-02-23 17:53:23