|
Posted - 10/16/2009 : 11:58:07
|
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
ALTER PROCEDURE [dbo].[Demo] ( @Closed bit, @Deleted bit ) AS
BEGIN SET NOCOUNT ON;
IF @Closed = '0' BEGIN SELECT LD.LDId, LD.DeviceType, LD.CloseDate, LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId, LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId, Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN Device ON LD.DeviceId = Device.DeviceId INNER JOIN Md ON Device.MdId = Md.MdId INNER JOIN Mk ON Md.MkId = Mk.MkId INNER JOIN DeviceTypes ON Md.DeviceTypeId = DeviceTypes.DeviceTypeId INNER JOIN SA ON LD.SId = SA.SId WHERE (LD.CloseDate IS NULL) AND (LD.Deleted = @Deleted)
END
IF @Closed = '1' BEGIN SELECT LD.LDId, LD.DeviceType,, LD.CloseDate, LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId, LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId, Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN Device ON LD.DeviceId = Device.DeviceId INNER JOIN Md ON Device.MdId = Md.MdId INNER JOIN Mk ON Md.MkId = Mk.MkId INNER JOIN DeviceTypes ON Md.DeviceTypeId = DeviceTypes.DeviceTypeId INNER JOIN SA ON LD.SId = SA.SId WHERE (LD.CloseDate IS NOT NULL) AND (LD.Deleted = @Deleted)
END END
same query is repeated with a different where condition
| |
Master BillaPosted Oct 16, 2009, 10:36 PM
I have read the sp, we can do some improvement ,
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[Demo]
(
@Closed bit,
@Deleted bit
)
AS
BEGIN
SET NOCOUNT ON;
IF @Closed = '0'
BEGIN
SELECT LD.LDId, LD.DeviceType, LD.CloseDate,
LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId,
LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId,
Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN
Device ON LD.DeviceId = Device.DeviceId
INNER JOIN
Md ON Device.MdId = Md.MdId INNER JOIN
Mk ON Md.MkId = Mk.MkId INNER JOIN
DeviceTypes ON Md.DeviceTypeId =
DeviceTypes.DeviceTypeId INNER JOIN
SA ON LD.SId = SA.SId
WHERE
(LD.CloseDate IS NULL) AND
(LD.Deleted = @Deleted)
END
else
BEGIN
SELECT LD.LDId, LD.DeviceType,, LD.CloseDate,
LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId,
LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId,
Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN
Device ON LD.DeviceId = Device.DeviceId
INNER JOIN
Md ON Device.MdId = Md.MdId INNER JOIN
Mk ON Md.MkId = Mk.MkId INNER JOIN
DeviceTypes ON Md.DeviceTypeId = DeviceTypes.DeviceTypeId INNER JOIN
SA ON LD.SId = SA.SId
WHERE
(LD.CloseDate IS NOT NULL) AND
(LD.Deleted = @Deleted)
END
END
Thank you
Kirtan PatelPosted Oct 16, 2009, 12:17 PM
Like below Code One More Suggestion is If you Use this Big Query Every time its Better to Create View of it :) so that
your stored procedure will be more readable and less complex :)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[Demo]
(
@Closed bit,
@Deleted bit
)
AS
BEGIN
SET NOCOUNT ON;
IF @Closed = '0'
BEGIN
SELECT LD.LDId, LD.DeviceType, LD.CloseDate,
LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId,
LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId,
Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN
Device ON LD.DeviceId = Device.DeviceId
INNER JOIN
Md ON Device.MdId = Md.MdId INNER JOIN
Mk ON Md.MkId = Mk.MkId INNER JOIN
DeviceTypes ON Md.DeviceTypeId =
DeviceTypes.DeviceTypeId INNER JOIN
SA ON LD.SId = SA.SId
WHERE
(LD.CloseDate IS NULL) AND
(LD.Deleted = @Deleted)
END
ELSE
BEGIN
SELECT LD.LDId, LD.DeviceType,, LD.CloseDate,
LD.SId, LD.P#, LD.VdId, LD.Person, LD.RId,
LD.Deleted, LD.DeletedOn, LD.DeletedBy, Device.MdId,
Device.S#, Md.MkId, Md.DeviceTypeId
FROM LD INNER JOIN
Device ON LD.DeviceId = Device.DeviceId
INNER JOIN
Md ON Device.MdId = Md.MdId INNER JOIN
Mk ON Md.MkId = Mk.MkId INNER JOIN
DeviceTypes ON Md.DeviceTypeId = DeviceTypes.DeviceTypeId INNER JOIN
SA ON LD.SId = SA.SId
WHERE
(LD.CloseDate IS NOT NULL) AND
(LD.Deleted = @Deleted)
END
END