बस सोच रहा था कि मैं एक संग्रहीत प्रक्रिया पर कुछ प्रतिक्रिया दे सकता हूं जो मैं चला रहा हूं और क्या परिदृश्य को संभालने का एक अधिक कुशल तरीका है (मुझे पूरा यकीन है कि वहां होगा!)।
मूल रूप से मेरे पास एक ही एसपी है जिसे मैं रिकॉर्ड्स (जॉब्स) की एक सूची को वापस करने के लिए कहता हूं जिसमें एक या एक से अधिक स्टेटस और एक सॉर्ट ऑर्डर हो सकता है (मैं पेजिंग के लिए रोवनम का उपयोग कर रहा हूं)। फिलहाल मैं RECOMPILE के साथ उपयोग कर रहा हूं क्योंकि स्थितियों पर भिन्नताएं हर समय (उपयोगकर्ता आदि के आधार पर) बदल सकती हैं। कुछ फ़िल्टरिंग भी चल रही है।
मैं एक IF स्टेटमेंट का उपयोग अनिवार्य रूप से एकमात्र बदलाव कोड के समान क्रम चलाने के लिए कर रहा हूं।
मुझे लगता है कि मेरे सवाल हैं: क्या ऐसा करने का एक बेहतर तरीका है (हो सकता है कि अलग-अलग एसपी विभिन्न स्थितियों के लिए हों)? क्या मैं ज्ञान की कमी (काफी संभावना) के कारण चीजों की तुलना कर रहा हूं, क्या एसपी वास्तव में ठीक है, लेकिन लाइनों की संख्या को कम करने के लिए मामूली चोटियों की आवश्यकता है?
मैंने नीचे सपा के एक हिस्से को चिपकाया है - पूर्ण कोड के लिए एकमात्र अंतर विभिन्न प्रकार के आदेशों के लिए अतिरिक्त IF कथन है ...
मैं किसी भी प्रतिक्रिया की सराहना करता हूं।
अग्रिम में धन्यवाद!
PROCEDURE [dbo].[sp_Jobs]
@PageNumber int,
@PageSize int,
@FilterExpression varchar(500),
@OrderBy varchar(50),
@CustomerID int,
@ShowNotSet bit,
@ShowPlaced bit,
@ShowProofed bit,
@ShowReProofed bit,
@ShowApproved bit,
@ShowOnTime bit,
@ShowLate bit,
@ShowProblem bit,
@ShowCompleted bit,
@ShowDispatched bit,
@ShowUnapproved bit,
@ShowClosed bit,
@ShowReturned bit,
@UserID int
WITH RECOMPILE
AS
--JobNumber DESC
if @OrderBy='JobNumberDESC'
BEGIN
WITH Keys AS (SELECT TOP (@PageNumber * @PageSize) ROW_NUMBER() OVER (ORDER BY JobNumber DESC) as rn,P1.jobNumber,P1.CustID,P1.DateIn,P1.DateDue,P1.DateOut,p1.client,p1.MasterJobStatusID,p1.MasterJobStatusTimestamp,p1.OwnerID
FROM
vw_Jobs_List P1 WITH (NOLOCK)
WHERE
(@CustomerID = 0 OR CustID = @CustomerID)
AND (@UserID = 0 OR OwnerID = @UserID)
AND ((@ShowNotSet = 1 AND MasterJobStatusID=1) OR (@ShowPlaced = 1 AND MasterJobStatusID=2) OR (@ShowProofed = 1 AND MasterJobStatusID=3) OR (@ShowReProofed = 1 AND MasterJobStatusID=4) OR (@ShowApproved = 1 AND MasterJobStatusID=5) OR (@ShowOnTime = 1 AND MasterJobStatusID=6) OR (@ShowLate = 1 AND MasterJobStatusID=7) OR (@ShowProblem = 1 AND MasterJobStatusID=8) OR (@ShowCompleted = 1 AND MasterJobStatusID=9) OR (@ShowDispatched = 1 AND MasterJobStatusID=10) OR (@ShowUnapproved = 1 AND MasterJobStatusID=11) OR (@ShowClosed = 1 AND MasterJobStatusID=12) OR (@ShowReturned = 1 AND MasterJobStatusID=13)) AND (Search LIKE '%'+@FilterExpression+'%')
ORDER BY
P1.JobNumber DESC ),SelectedKeys AS (
SELECT TOP (@PageSize)SK.rn,SK.JobNumber,SK.CustID,SK.DateIn,SK.DateDue,SK.DateOut
FROM
Keys SK
WHERE
SK.rn > ((@PageNumber-1) * @PageSize)
ORDER BY
SK.JobNumber DESC)
SELECT SK.rn,J.JobNumber,J.OwnerID,J.Description,J.Client,SK.CustID,OrderNumber, CAST(DateAdd(d, -2, CAST(isnull(SK.DateIn,0) AS DateTime)) AS nvarchar) AS DateIn, CAST(DateAdd(d, -2, CAST(isnull(SK.DateDue,0) AS DateTime)) AS nvarchar) AS DateDue,CAST(DateAdd(d, -2, CAST(isnull(SK.DateOut,0) AS DateTime)) AS nvarchar) AS DateOut, Del_Method,Ticket#, InvoiceEmailed, InvoicePrinted, InvoiceExported, InvoiceComplete, JobStatus,j.MasterJobStatusID,j.MasterJobStatusTimestamp,js.MasterJobStatus
FROM SelectedKeys SK JOIN vw_Jobs_List J WITH (NOLOCK) ON j.JobNumber=SK.JobNumber JOIN tbl_SYSTEM_MasterJobStatus js WITH (NOLOCK) ON j.MasterJobStatusID=js.MasterJobStatusID
ORDER BY
SK.JobNumber DESC
END
--ELSE अन्य कॉलम छँटाई के लिए