मेरी DB में मैं दो तालिकाओं आइटम (आईडी, ..., ToatlViews पूर्णांक) और ItemViews (आईडी, Itemid, समय-चिह्न) हैअद्यतन एक और तालिका में डेटा से स्तंभ गणना
ItemViews तालिका में मैं के सभी दृश्यों की दुकान एक वस्तु के रूप में वे साइट पर आते हैं। समय-समय पर मैं आइटम्स.ToatlViews फ़ील्ड को अपडेट करने के लिए संग्रहीत प्रक्रिया को कॉल करना चाहता हूं। मैंने कर्सर का उपयोग करके इस एसपी को करने की कोशिश की ... लेकिन अद्यतन कथन गलत है। क्या आप इसे ठीक करने में मेरी मदद कर सकते हैं? क्या मैं कर्सर के बिना ऐसा कर सकता हूं?
CREATE PROCEDURE UpdateItemsViews
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @currentItemId int
DECLARE @currentItemCursor CURSOR
SET @currentItemCursor = CURSOR FOR SELECT Id FROM dbo.Items
OPEN @currentItemCursor
FETCH NEXT FROM @currentItemCursor INTO @currentItemId
WHILE @@FETCH_STATUS = 0
BEGIN
Update dbo.Items set TotalViews = count(*)
from dbo.ItemViews where [email protected]
FETCH NEXT FROM @currentItemCursor INTO @currentItemId
END
END
GO
मैं अनुशंसा करता हूं कि आप SQL लिखते समय कर्सर का उपयोग न करने के हर प्रयास करें, क्योंकि डेटाबेस के विरुद्ध आप जो लिखना चाहते हैं उसे लिखने के लिए हमेशा 'सेट' आधारित तरीका होगा। निस्संदेह इस नियम के लिए हमेशा अपवाद होगा। लालित्य के लिए –