sqlcurious
asked on
stored proce help needed
hi experts
i have small problem in the following procedure
If i execute following
exec DBSP_GetTermAndCondition '','','','','','04/04/2011 ','04/04/2 011' i dont get the records created on 04/04/04 ..what could be the problem
but while populating table select * from dbo.TBL_TermAndCondition the result exists
--exec DBSP_GetTermAndCondition '','','','','','04/04/2011 ','04/04/2 011'
ALTER PROCEDURE [dbo].[DBSP_GetTermAndCond ition]
(
@TermDescription VARCHAR(200) = '',
@TermDefault BIT,
@TermStatus INT,
@LastUpdatedBy INT,
@DivisionID varchar(200)='',
@LastUpdatedFrom DateTime = null,
@LastUpdatedTo DateTime=null
)
AS
BEGIN
DECLARE @SQL VARCHAR(8000)
DECLARE @TEMP VARCHAR(200)
SET @SQL = '
SELECT DISTINCT T.TermID, T.TermDescription, T.StatusID, S.StatusDescription, T.TermDefault,
u.UserFirstName + '+ ''' '''+ ' + u.UserLastName as CreatedBy, T.CreatedDate,
ur.UserFirstName + '+ ''' '''+ '+ u.UserLastName as LastUpdatedBy,T.LastUpdate dDate, dbo.fneBid_TermDivision(T. TermID) DivisionName
FROM TBL_TermAndCondition AS T
left join TBL_eBid_Status S on T.StatusID = S.StatusID
left join TBL_TermAndConditionDivisi on tcd on T.TermID = tcd.TermID
left join TBL_Division d on tcd.DivisionID = d.DivisionID
left join TBL_eBid_User u on T.createdby=u.userid
left join TBL_eBid_User ur on T.LastUpdatedBy=ur.userid
Where T.TermID > 0 '
IF(@TermDescription <> '')
BEGIN
SET @SQL = @SQL + ' and TermDescription like ' + '''' + '%' + @TermDescription + '%' + ''''
END
IF(@TermDefault = 1 )
BEGIN
SET @SQL = @SQL + ' and TermDefault = '+ convert(varchar(5), @TermDefault)
END
IF(@TermStatus != 0)
BEGIN
SET @SQL = @SQL + ' and T.StatusID = '+ convert(varchar(10),@TermS tatus )
END
IF(@LastUpdatedBy > 0)
BEGIN
SET @SQL = @SQL + ' and T.LastUpdatedBy = ' + convert(varchar(5),@LastUp datedBy )
END
IF(@DivisionID <> 0)
BEGIN
SET @SQL = @SQL + ' and d.DivisionID like ' + '''' + '%' + @DivisionID + '%' + ''''
END
IF (@LastUpdatedFrom < @LastUpdatedTo)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,isnull(t.L astUpdated Date,'''+C ONVERT(VAR CHAR(30),@ LastUpdate dFrom,112) + '''),112) >=''' + CONVERT(VARCHAR(30),@LastU pdatedFrom ,112) + ''''
SET @SQL = @SQL + ' AND CONVERT(varchar,isnull(t.L astUpdated Date,'''+C ONVERT(VAR CHAR(30),@ LastUpdate dTo,112) + '''),112) <= ''' + CONVERT(VARCHAR(30),@LastU pdatedTo,1 12) + ''''
END
ELSE IF (@LastUpdatedFrom = @LastUpdatedTo)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,t.createdD ate,112) = ''' + CONVERT(VARCHAR(30),@LastU pdatedFrom ,112) + ''''
SET @SQL = @SQL + ' AND CONVERT(varchar,t.LastUpda tedDate,11 2) = ''' + CONVERT(VARCHAR(30),@LastU pdatedTo,1 12) + ''''
END
ELSE IF (@LastUpdatedFrom = NULL)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,t.CreatedD ate,112) >=''' + CONVERT(VARCHAR(30),@LastU pdatedFrom ,112) + ''''
SET @SQL = @SQL + ' AND CONVERT(varchar,t.LastUpda tedDate,11 2) <= ''' + CONVERT(VARCHAR(30),@LastU pdatedTo,1 12) + ''''
END
END
PRINT @SQL
EXEC (@SQL)
i have small problem in the following procedure
If i execute following
exec DBSP_GetTermAndCondition '','','','','','04/04/2011
but while populating table select * from dbo.TBL_TermAndCondition the result exists
--exec DBSP_GetTermAndCondition '','','','','','04/04/2011
ALTER PROCEDURE [dbo].[DBSP_GetTermAndCond
(
@TermDescription VARCHAR(200) = '',
@TermDefault BIT,
@TermStatus INT,
@LastUpdatedBy INT,
@DivisionID varchar(200)='',
@LastUpdatedFrom DateTime = null,
@LastUpdatedTo DateTime=null
)
AS
BEGIN
DECLARE @SQL VARCHAR(8000)
DECLARE @TEMP VARCHAR(200)
SET @SQL = '
SELECT DISTINCT T.TermID, T.TermDescription, T.StatusID, S.StatusDescription, T.TermDefault,
u.UserFirstName + '+ ''' '''+ ' + u.UserLastName as CreatedBy, T.CreatedDate,
ur.UserFirstName + '+ ''' '''+ '+ u.UserLastName as LastUpdatedBy,T.LastUpdate
FROM TBL_TermAndCondition AS T
left join TBL_eBid_Status S on T.StatusID = S.StatusID
left join TBL_TermAndConditionDivisi
left join TBL_Division d on tcd.DivisionID = d.DivisionID
left join TBL_eBid_User u on T.createdby=u.userid
left join TBL_eBid_User ur on T.LastUpdatedBy=ur.userid
Where T.TermID > 0 '
IF(@TermDescription <> '')
BEGIN
SET @SQL = @SQL + ' and TermDescription like ' + '''' + '%' + @TermDescription + '%' + ''''
END
IF(@TermDefault = 1 )
BEGIN
SET @SQL = @SQL + ' and TermDefault = '+ convert(varchar(5), @TermDefault)
END
IF(@TermStatus != 0)
BEGIN
SET @SQL = @SQL + ' and T.StatusID = '+ convert(varchar(10),@TermS
END
IF(@LastUpdatedBy > 0)
BEGIN
SET @SQL = @SQL + ' and T.LastUpdatedBy = ' + convert(varchar(5),@LastUp
END
IF(@DivisionID <> 0)
BEGIN
SET @SQL = @SQL + ' and d.DivisionID like ' + '''' + '%' + @DivisionID + '%' + ''''
END
IF (@LastUpdatedFrom < @LastUpdatedTo)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,isnull(t.L
SET @SQL = @SQL + ' AND CONVERT(varchar,isnull(t.L
END
ELSE IF (@LastUpdatedFrom = @LastUpdatedTo)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,t.createdD
SET @SQL = @SQL + ' AND CONVERT(varchar,t.LastUpda
END
ELSE IF (@LastUpdatedFrom = NULL)
BEGIN
SET @SQL = @SQL + ' AND CONVERT(varchar,t.CreatedD
SET @SQL = @SQL + ' AND CONVERT(varchar,t.LastUpda
END
END
PRINT @SQL
EXEC (@SQL)
Show the output of PRINT @SQL
I'm sure you have a typo
04/04/2011','04/04/2011' i dont get the records created on 04/04/04
2004 and 2011 are 7 years apart otherwise.
Your PRINT will produce
which is really limited only by 3 conditions
T.TermID>0
CONVERT(varchar,t.createdD ate,112) = '20110404'
CONVERT(varchar,t.LastUpda tedDate,11 2) = '20110404'
If EITHER OF TermID or t.createdDate is NULL, you don't get a result. That's how NULL's work, because they are incomparable. If TermID is <=0, no result either, ditto t.CreatedDate.
Check those first.
Another point I would make is that your query is not index friendly. Doing CONVERT(Varchar, [date]) that way will negate the possibility of using indexes. You should generate the SQL statement like this:
AND t.createdDate >= '20110404'
AND t.createdDate < dateadd(d,'20110404' ,1)
AND t.LastUpdatedDate >= '20110404'
and t.LastUpdatedDate < dateadd(d, '20110404',1)
04/04/2011','04/04/2011' i dont get the records created on 04/04/04
2004 and 2011 are 7 years apart otherwise.
Your PRINT will produce
SELECT DISTINCT T.TermID, T.TermDescription, T.StatusID, S.StatusDescription, T.TermDefault,
u.UserFirstName + ' ' + u.UserLastName as CreatedBy, T.CreatedDate,
ur.UserFirstName + ' '+ u.UserLastName as LastUpdatedBy,T.LastUpdatedDate, dbo.fneBid_TermDivision(T.TermID) DivisionName
FROM TBL_TermAndCondition AS T
left join TBL_eBid_Status S on T.StatusID = S.StatusID
left join TBL_TermAndConditionDivision tcd on T.TermID = tcd.TermID
left join TBL_Division d on tcd.DivisionID = d.DivisionID
left join TBL_eBid_User u on T.createdby=u.userid
left join TBL_eBid_User ur on T.LastUpdatedBy=ur.userid
Where T.TermID > 0 AND CONVERT(varchar,t.createdDate,112) = '20110404' AND CONVERT(varchar,t.LastUpdatedDate,112) = '20110404'
which is really limited only by 3 conditions
T.TermID>0
CONVERT(varchar,t.createdD
CONVERT(varchar,t.LastUpda
If EITHER OF TermID or t.createdDate is NULL, you don't get a result. That's how NULL's work, because they are incomparable. If TermID is <=0, no result either, ditto t.CreatedDate.
Check those first.
Another point I would make is that your query is not index friendly. Doing CONVERT(Varchar, [date]) that way will negate the possibility of using indexes. You should generate the SQL statement like this:
AND t.createdDate >= '20110404'
AND t.createdDate < dateadd(d,'20110404' ,1)
AND t.LastUpdatedDate >= '20110404'
and t.LastUpdatedDate < dateadd(d, '20110404',1)
ASKER
exec DBSP_GetNote '','',null,null,'','04/04/ 2011','04/ 04/2011'
SELECT DISTINCT n.NoteID, n.NoteDescription, dbo.fneBid_NoteDivision(n. NoteID) as DivisionName, s.StatusDescription, n.NoteDefault, u1.UserFirstName + ' ' + u1.UserLastName as CreatedByUser, convert(varchar(10),n.Crea tedDate,11 0) as CreatedDate, u2.UserFirstName + ' ' + u2.UserLastName as LastUpdatedByUser, convert(varchar(10),n.Last UpdatedDat e,110) as LastUpdatedDate
FROM TBL_Note AS n
LEFT JOIN TBL_eBid_Status s on n.StatusID = s.StatusID
LEFT JOIN dbo.TBL_NoteDivision nd on n.NoteID = nd.NoteID
LEFT JOIN TBL_Division d on nd.DivisionID = d.DivisionID
LEFT JOIN TBL_eBid_User u1 on n.CreatedBy = u1.UserID
LEFT JOIN TBL_eBid_User u2 on n.LastUpdatedBy = u2.UserID
Where n.NoteID > 0 AND CONVERT(varchar,n.LastUpda tedDate,11 2) = '20110404'
SELECT DISTINCT n.NoteID, n.NoteDescription, dbo.fneBid_NoteDivision(n.
FROM TBL_Note AS n
LEFT JOIN TBL_eBid_Status s on n.StatusID = s.StatusID
LEFT JOIN dbo.TBL_NoteDivision nd on n.NoteID = nd.NoteID
LEFT JOIN TBL_Division d on nd.DivisionID = d.DivisionID
LEFT JOIN TBL_eBid_User u1 on n.CreatedBy = u1.UserID
LEFT JOIN TBL_eBid_User u2 on n.LastUpdatedBy = u2.UserID
Where n.NoteID > 0 AND CONVERT(varchar,n.LastUpda
ASKER
actually following is the result
exec DBSP_GetTermAndCondition '','','','','','04/04/2011
SELECT DISTINCT T.TermID, T.TermDescription, T.StatusID, S.StatusDescription, T.TermDefault,
u.UserFirstName + ' ' + u.UserLastName as CreatedBy, T.CreatedDate,
ur.UserFirstName + ' '+ u.UserLastName as LastUpdatedBy,T.LastUpdate
FROM TBL_TermAndCondition AS T
left join TBL_eBid_Status S on T.StatusID = S.StatusID
left join TBL_TermAndConditionDivisi
left join TBL_Division d on tcd.DivisionID = d.DivisionID
left join TBL_eBid_User u on T.createdby=u.userid
left join TBL_eBid_User ur on T.LastUpdatedBy=ur.userid
Where T.TermID > 0 AND CONVERT(varchar,t.createdD
@sqlcurious
I got the output after some tinkering. Please see my comment above.
I got the output after some tinkering. Please see my comment above.
ASKER
can you please modify my stored proc according to your comment
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
thnks