troubleshooting Question

row that should be excluded still shows up

Avatar of Tom Knowlton
Tom KnowltonFlag for United States of America asked on
Microsoft SQL ServerMicrosoft Development
16 Comments1 Solution341 ViewsLast Modified:
disclaimer:  I am a sql beginner working on concepts a bit beyond my comfort level.  Stored Proc was not written by me.


I do not see why a row is showing up that should be hidden (based upon my where clause conditions)

Here is the Stored Proc:

(note:  final result is a select on a temporary table, if that matters)

(note 2:  The "ShowForm" column and the table AgentFormOverride were recently created by me and this is my attempt at integration into the existing Stored Proc below)


USE [PP]
GO
/****** Object:  StoredProcedure [dbo].[AgentFormList_Get]    Script Date: 12/31/2012 09:32:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[AgentFormList_Get]

@AssetID int,
@AssetSID int

AS
/*
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Name:         AgentFormList_Get
Date:         
Purpose:      Returns list of active forms for specified asset
Requested by: Madhav
Author:       Paul Peterson


History
Date              Modified by         Requested by      Modification/Description
--------------------------------------------------------------------------------------------------------------
11-30-2010				Paul								Kade							Don't return Reimbursement Policy for Saxon & Litton

3/3/2011					Bethb								Madhav						A part of the Document and Image Archive Process, changed proc to look at vDocument

////////////////////////////////////////////////////////////////////////////////////////////////////////////
*/

DECLARE @Colist bit,
@ExcludeValue int,
@DocExpReim int,
@Abbr varchar(10)

SELECT @Colist = dbo.ColistRequired(@AssetID, @AssetSID)
SELECT @ExcludeValue = CASE WHEN @Colist = 1 THEN 2 ELSE 1 END
SELECT @DocExpReim = dbo.GetLookupID('DocExpReim')

SELECT @Abbr = RTRIM(Merchant.Abbr)
FROM Asset
INNER JOIN Pool ON Asset.PoolID = Pool.PoolID AND Asset.PoolSID = Pool.PoolSID
INNER JOIN Merchant on Pool.MerchantID = Merchant.MerchantID AND Pool.MerchantSID = Merchant.MerchantSID
WHERE Asset.AssetID = @AssetID AND Asset.AssetSID = @AssetSID

DECLARE @tblForms table (
AgentFormListID int,
AgentFormListSID int,
FormTypeID int,
Sequence int,
FormName varchar(50),
AcceptanceReqd bit,
DuplicatesAllowed bit,
ExternalLink varchar(50),
CreateDt datetime,
ActionDate datetime,
AcceptDecline int,
AcceptedBy varchar(50),
DocumentID int,
DocumentSID int,
AssetTaskID int,
AssetTaskSID int,
AgentFormID int,
AgentFormSID int,
TaskCode varchar(50),
Active bit,
ShowForm bit
)

INSERT INTO @tblForms
SELECT AgentFormList.AgentFormListID, AgentFormList.AgentFormListSID,
FormTypeID, Sequence, FormName, AcceptanceReqd, DuplicatesAllowed, ExternalLink,
CreateDt, ActionDate, AcceptDecline, dbo.getUserName(AgentForm.AcceptUserID,AgentForm.AcceptUserSID) AS AcceptedBy, Document.DocumentID, Document.DocumentSID, AssetTaskID, AssetTaskSID, 
AgentForm.AgentFormID, AgentForm.AgentFormSID, TaskCode, AgentForm.Active, afo.ShowForm

FROM AgentFormList
LEFT JOIN AgentForm on 
AgentFormList.AgentFormListID = AgentForm.AgentFormListID 
AND AgentFormList.AgentFormListSID = AgentForm.AgentFormListSID
AND AgentForm.AssetID = @AssetID AND AgentForm.AssetSID = @AssetSID 
LEFT JOIN AgentFormOverride afo on
AgentFormList.AgentFormListID = afo.AgentFormListID
LEFT JOIN vDocument Document ON 
AgentForm.DocumentID = Document.DocumentID 
AND AgentForm.DocumentSID = Document.DocumentSID
WHERE ColistFlag <> @ExcludeValue
AND (FormTypeID <> @DocExpReim OR (FormTypeID = @DocExpReim AND @Abbr NOT IN ('LIT','SXN')))
INSERT INTO @tblForms
SELECT
	AgentFormListID,
	AgentFormListSID,
	FormTypeID,
	Sequence,
	FormName,
	AcceptanceReqd,
	DuplicatesAllowed,
	ExternalLink,
	Null,
	Null,
	Null,
	Null,
	Null,
	Null,
	Null,
	Null,
	Null,
	Null,
	TaskCode,
	1,
	ShowForm
FROM @tblForms t
	WHERE
	t.ShowForm = 1 and
	t.DuplicatesAllowed = 1 AND NOT EXISTS 
		(SELECT * FROM @tblForms WHERE Sequence = t.Sequence AND DocumentID IS NULL)


SELECT * FROM @tblForms 
order by sequence


Here is the where clause (at the bottom of the stored proc) that (in my mind) should be excluding the last row:

WHERE
      t.ShowForm = 1 and
      t.DuplicatesAllowed = 1 AND NOT EXISTS
            (SELECT * FROM @tblForms WHERE Sequence = t.Sequence AND DocumentID IS NULL)


The reason is that ShowForm is set to False (set to "0").  ShowForm type is bit.


Essentially, the last row in the result set should toggle (show or be hidden) as ShowForm is set to "show" or "not show".

Here is the result set:

toggle show hide
ASKER CERTIFIED SOLUTION
Paul MacDonald
Director, Information Systems

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 16 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 16 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros