SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
SQL सर्वर 2008 में इस SQL क्वेरी को कैसे लिखें?एक चयनित क्वेरी
SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
SQL सर्वर 2008 में इस SQL क्वेरी को कैसे लिखें?एक चयनित क्वेरी
धन्यवाद:
यहाँ जवाब यह मैं कर सकते हैं की तुलना में बेहतर समझा जाएगा।
यहां समाधान है।
पहले हम एक समारोह बनाई
CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER
AS
BEGIN
DECLARE @id INTEGER
set @id= (select TOP(1) id From tbl where [email protected])
RETURN @id
END
तो हम चयन क्वेरी
Select col1, col2, col3,
GetAIntFromStoredProc(T.col1) As col4
From Tbl as T
Where [email protected]
जब तक आप अपनी संग्रहीत प्रक्रिया में कोई INSERT या UPDATE स्टेटमेंट नहीं कर रहे हैं, तो आप शायद इसे एक फ़ंक्शन बनाना चाहते हैं।
संग्रहीत प्रक्रिया बाहरी कार्यक्रम, या एक समय अंतराल पर निष्पादित करने के लिए हैं। @twoleggedhorse
एक संग्रहीत प्रक्रिया का उपयोग "बाहरी प्रोग्राम द्वारा निष्पादित करने के लिए, या एक समय अंतराल पर" किया जा सकता है।, लेकिन वे किसी भी तरह से सीमित नहीं हैं वह, या केवल उन उद्देश्यों के लिए इरादा है। आंकड़ों में हेरफेर के लिए मांग संदर्भ पर अकेले स्टैंड में चलाने के लिए लिपियों को लिखा जाता है। – BuvinJ
कार्य-चुने पाश अंदर कॉल करने के लिए आसान कर रहे हैं, लेकिन वे डॉन ' आपको आवेषण, अद्यतन, हटाना इत्यादि चलाने की सुविधा नहीं है। वे केवल क्वेरी ऑपरेशंस के लिए उपयोगी हैं। डेटा को कुशल बनाने के लिए आपको एक संग्रहीत प्रक्रिया की आवश्यकता है।
तो, इस सवाल का असली जवाब यह है कि आपको "कर्सर" के माध्यम से एक चयन कथन के परिणामों के माध्यम से पुन: प्रयास करना होगा और उस लूप के भीतर से प्रक्रिया को कॉल करना होगा। यहाँ एक उदाहरण है:
DECLARE @myId int;
DECLARE @myName nvarchar(60);
DECLARE myCursor CURSOR FORWARD_ONLY FOR
SELECT Id, Name FROM SomeTable;
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myId, @myName;
WHILE @@FETCH_STATUS = 0 BEGIN
EXECUTE dbo.myCustomProcedure @myId, @myName;
FETCH NEXT FROM myCursor INTO @myId, @myName;
END;
CLOSE myCursor;
DEALLOCATE myCursor;
ध्यान दें कि @@FETCH_STATUS
एक मानक चर आप के लिए अद्यतन हो जाता है जो है। यहां शेष ऑब्जेक्ट नाम कस्टम हैं।
आपको फ़ंक्शंस देखना चाहिए, आप किसी संग्रहित प्रक्रिया को किसी चयनित क्वेरी से कॉल नहीं कर सकते हैं। – twoleggedhorse
col1, col2, col3, EXEC GetAIntFromStoredProc (t.col1) को col4 के रूप में टीबीआर से टी के रूप में चुनें जहां (col2 = @parm) EX1 MyStoredProc 'param1', 'param2' से col1, col2 का चयन नहीं करता है। यह एक डुप्लिकेट नहीं है, संपादन करने का प्रयास किया गया लेकिन अस्वीकार कर दिया गया था, इस पोस्ट का जवाब सही है – DooMMcQ