जवाबों:
संग्रहीत प्रक्रियाएँ SQL कथनों का एक बैच होती हैं जिन्हें एक-दो तरीकों से निष्पादित किया जा सकता है। अधिकांश प्रमुख डीबीएम संग्रहीत प्रक्रियाओं का समर्थन करते हैं; हालाँकि, सभी ऐसा नहीं करते हैं। आपको विशेष के लिए अपने विशेष DBMS सहायता प्रलेखन के साथ सत्यापित करने की आवश्यकता होगी। जैसा कि मैं SQL सर्वर से सबसे अधिक परिचित हूं, मैं अपने नमूने के रूप में उपयोग करूंगा।
एक संग्रहीत कार्यविधि बनाने के लिए वाक्य रचना काफी सरल है:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
उदाहरण के लिए:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
संग्रहीत कार्यविधियों का एक लाभ यह है कि आप डेटा एक्सेस लॉजिक को एक ही स्थान पर केंद्रीकृत कर सकते हैं जो तब डीबीए के अनुकूलन के लिए आसान है। संग्रहीत प्रक्रियाओं में एक सुरक्षा लाभ भी है कि आप एक संग्रहीत प्रक्रिया को निष्पादित अधिकार प्रदान कर सकते हैं, लेकिन उपयोगकर्ता को अंतर्निहित तालिकाओं पर अनुमतियाँ पढ़ने / लिखने की आवश्यकता नहीं होगी। यह SQL इंजेक्शन के खिलाफ एक अच्छा पहला कदम है।
संग्रहीत प्रक्रिया डाउनसाइड्स के साथ आती हैं, मूल रूप से आपके मूल सीआरयूडी ऑपरेशन से जुड़े रखरखाव । मान लें कि प्रत्येक तालिका में आपके पास सम्मिलित करें, अद्यतन करें, हटाएं और प्राथमिक कुंजी के आधार पर कम से कम एक का चयन करें, इसका मतलब है कि प्रत्येक तालिका में 4 प्रक्रियाएं होंगी। अब 400 टेबल का एक सभ्य आकार डेटाबेस लें, और आपके पास 1600 प्रक्रियाएँ हैं! और आपको लगता है कि आपके पास डुप्लिकेट नहीं है जो आप शायद करेंगे।
यह वह जगह है जहां एक ORM या किसी अन्य विधि का उपयोग करके ऑटो को अपने मूल CRUD के संचालन से उत्पन्न किया जाता है।
एक संग्रहीत कार्यविधि पूर्वनिर्धारित SQL कथनों का एक सेट है जो एक विशेष कार्य करने के लिए उपयोग किया जाता है।
उदाहरण: यदि मेरे पास ए Employee
मेज है
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
पहले मैं पुनः प्राप्त कर रहा हूं Employee
तालिका को :
Create Procedure Employee details
As
Begin
Select * from Employee
End
SQL सर्वर पर प्रक्रिया को चलाने के लिए:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
फिर दूसरा, मैं कर्मचारी तालिका में मान डाल रहा हूं
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
SQL सर्वर पर पैरामीट्रिक प्रक्रिया चलाने के लिए:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
उदाहरण: @Name Varchar(30)
में Employee
तालिका Name
स्तंभ के आकार का होना चाहिए varchar(30)
।
संग्रहीत कार्यविधि SQL कथन का एक समूह है जो डेटाबेस में बनाया और संग्रहीत किया गया है। एक संग्रहीत प्रक्रिया इनपुट मापदंडों को स्वीकार करेगी ताकि विभिन्न ग्राहकों द्वारा विभिन्न इनपुट डेटा का उपयोग करके नेटवर्क पर एक एकल प्रक्रिया का उपयोग किया जा सके। एक संग्रहीत प्रक्रिया नेटवर्क ट्रैफ़िक को कम करेगी और प्रदर्शन बढ़ाएगी। यदि हम एक संग्रहीत प्रक्रिया को संशोधित करते हैं तो सभी ग्राहकों को अद्यतन संग्रहीत प्रक्रिया मिल जाएगी।
एक संग्रहीत प्रक्रिया बनाने का नमूना
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
संग्रहीत प्रक्रियाओं का उपयोग करने के लाभ
एक संग्रहीत प्रक्रिया मॉड्यूलर प्रोग्रामिंग की अनुमति देती है।
आप एक बार प्रक्रिया बना सकते हैं, इसे डेटाबेस में संग्रहीत कर सकते हैं, और इसे अपने कार्यक्रम में किसी भी समय कॉल कर सकते हैं।
एक संग्रहीत प्रक्रिया तेजी से निष्पादन की अनुमति देती है।
यदि ऑपरेशन के लिए बड़ी मात्रा में SQL कोड की आवश्यकता होती है जो दोहराव से किया जाता है, तो संग्रहीत कार्यविधियाँ तेज़ हो सकती हैं। जब वे पहली बार निष्पादित होते हैं, तो उन्हें पार्स और अनुकूलित किया जाता है, और संग्रहीत कार्यविधि का संकलित संस्करण बाद में उपयोग के लिए मेमोरी कैश में रहता है। इसका अर्थ है कि संग्रहीत कार्यविधि को पुन: उपयोग करने की आवश्यकता नहीं है और प्रत्येक उपयोग के साथ पुन: उपयोग किया जाना चाहिए, जिसके परिणामस्वरूप बहुत तेज़ निष्पादन समय होता है।
एक संग्रहीत प्रक्रिया नेटवर्क ट्रैफ़िक को कम कर सकती है।
Transact-SQL कोड की सैकड़ों लाइनों की आवश्यकता वाले एक ऑपरेशन को एक कथन के माध्यम से निष्पादित किया जा सकता है जो नेटवर्क पर कोड की सैकड़ों लाइनों को भेजने के बजाय एक प्रक्रिया में कोड को निष्पादित करता है।
संग्रहीत प्रक्रियाएं आपके डेटा को बेहतर सुरक्षा प्रदान करती हैं
उपयोगकर्ताओं को संग्रहीत प्रक्रिया को निष्पादित करने की अनुमति दी जा सकती है, भले ही उनके पास प्रक्रिया के विवरणों को सीधे निष्पादित करने की अनुमति न हो।
SQL सर्वर में हमारे पास विभिन्न प्रकार की संग्रहीत प्रक्रियाएँ हैं:
सिस्टम- स्टोर की गई प्रक्रियाओं को मास्टर डेटाबेस में संग्रहीत किया जाता है और ये एक sp_
उपसर्ग के साथ शुरू होते हैं । सिस्टम टेबल में बाहरी एप्लिकेशन कॉल के लिए SQL सर्वर फ़ंक्शन का समर्थन करने के लिए इन प्रक्रियाओं का उपयोग विभिन्न प्रकार के कार्यों को करने के लिए किया जा सकता है
उदाहरण: sp_helptext [StoredProcedure_Name]
उपयोगकर्ता-परिभाषित संग्रहीत प्रक्रियाएं आमतौर पर उपयोगकर्ता डेटाबेस में संग्रहीत होती हैं और आमतौर पर उपयोगकर्ता डेटाबेस में कार्यों को पूरा करने के लिए डिज़ाइन की जाती हैं। इन प्रक्रियाओं को कोड करते समय , उपसर्ग का उपयोग नहीं करते हैंsp_
क्योंकि यदि हम sp_
पहले उपसर्ग का उपयोग करते हैं , तो यह मास्टर डेटाबेस की जांच करेगा, और फिर यह उपयोगकर्ता परिभाषित डेटाबेस के लिए आता है।
विस्तारित संग्रहीत कार्यविधियाँ वे प्रक्रियाएँ हैं जो DLL फ़ाइलों से कार्य करती हैं। आजकल, विस्तारित संग्रहीत प्रक्रियाओं को इस कारण से हटा दिया जाता है कि विस्तारित संग्रहीत प्रक्रियाओं का उपयोग करने से बचने के लिए बेहतर होगा।
आम तौर पर, एक संग्रहीत कार्यविधि "SQL फ़ंक्शन" होती है। उनके पास है:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
यह एक टी-एसक्यूएल केंद्रित उदाहरण है। संग्रहीत कार्यविधियाँ अधिकांश SQL कथनों को निष्पादित कर सकती हैं, स्केलर और तालिका-आधारित मान लौटा सकती हैं, और उन्हें अधिक सुरक्षित माना जाता है क्योंकि वे SQL इंजेक्शन के हमलों को रोकते हैं।
इस तरह की स्थिति के बारे में सोचो,
ध्यान दें:
एक संग्रहीत कार्यविधि का उपयोग मुख्य रूप से डेटाबेस पर कुछ कार्य करने के लिए किया जाता है। उदाहरण के लिए
संग्रहीत कार्यविधि कुछ भी नहीं है, लेकिन SQL कथनों का समूह एकल निष्पादन योजना में संकलित है।
उदाहरण: एक संग्रहीत कार्यविधि बनाना
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
संग्रहीत प्रक्रिया को बदलना या संशोधित करना:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
संग्रहीत प्रक्रिया को छोड़ें या हटाएं:
DROP PROCEDURE GetEmployee
एक संग्रहीत कार्यविधि एक या एक से अधिक SQL कथनों का एक पूर्वनिर्धारित सेट है जो कुछ विशिष्ट कार्य करता है।
एक संग्रहीत कार्यविधि का उपयोग करके अकेले खड़े होना चाहिए EXEC
एक संग्रहीत प्रक्रिया कई मापदंडों को वापस कर सकती है
लेनदेन को लागू करने के लिए एक संग्रहीत प्रक्रिया का उपयोग किया जा सकता है
"एक संग्रहीत प्रक्रिया क्या है" यहां पहले से ही अन्य पदों पर उत्तर दिया गया है। मैं जो पोस्ट करूंगा वह संग्रहीत कार्यविधि का उपयोग करने का एक कम ज्ञात तरीका है। यह है grouping stored procedures
या numbering stored procedures
।
सिंटेक्स संदर्भ
; number
के अनुसार इस
एक वैकल्पिक पूर्णांक जो एक ही नाम के समूह प्रक्रियाओं के लिए प्रयोग किया जाता है। इन समूहीकृत प्रक्रियाओं को एक डीआरओपी प्रक्रिया विवरण का उपयोग करके एक साथ गिराया जा सकता है
उदाहरण
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
उपयोग
exec FirstTest 10
exec FirstTest;2 20,30
परिणाम
एक और प्रयास
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
परिणाम
Msg 2730, Level 11, State 1, Procedure SecondTest, Line 1 [बैच प्रारंभ लाइन 3] 2 के समूह संख्या के साथ प्रक्रिया 'SecondTest' नहीं बना सकता क्योंकि एक ही नाम और 1 के समूह संख्या वाली प्रक्रिया वर्तमान में मौजूद नहीं है डेटाबेस। पहली प्रक्रिया 'सेकंडटेस्ट' को निष्पादित करना चाहिए; 1 पहला।
संदर्भ :
सावधान
संग्रहीत कार्यविधि SQL कथन और प्रक्रियात्मक तर्क का नाम संग्रह है, जो संकलित, सत्यापित और सर्वर डेटाबेस में संग्रहीत है। एक संग्रहीत प्रक्रिया को आमतौर पर अन्य डेटाबेस ऑब्जेक्ट्स की तरह व्यवहार किया जाता है और सर्वर सुरक्षा तंत्र के माध्यम से नियंत्रित किया जाता है।
DBMS में, एक संग्रहीत कार्यविधि SQL कथन का एक सेट नाम के साथ है जो डेटाबेस में संकलित रूप में संग्रहीत किया जाता है ताकि इसे कई कार्यक्रमों द्वारा साझा किया जा सके।
एक संग्रहीत प्रक्रिया का उपयोग इसमें सहायक हो सकता है
डेटा तक एक नियंत्रित पहुंच प्रदान करना (अंतिम उपयोगकर्ता केवल डेटा दर्ज या बदल सकते हैं, लेकिन प्रक्रिया नहीं लिख सकते हैं)
डेटा अखंडता सुनिश्चित करना (डेटा एक सुसंगत तरीके से दर्ज किया जाएगा) और
उत्पादकता में सुधार (संग्रहीत प्रक्रिया के विवरण केवल एक बार लिखे जाने की आवश्यकता है)
सरल के लिए,
संग्रहित प्रक्रिया कर रहे हैं कार्यक्रम संग्रहित , एक कार्यक्रम / समारोह डेटाबेस में संग्रहीत।
प्रत्येक संग्रहीत प्रोग्राम में एक बॉडी होती है जिसमें SQL स्टेटमेंट होता है। यह कथन अर्धविराम (;) वर्णों द्वारा अलग किए गए कई कथनों से बना एक यौगिक कथन हो सकता है।
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
SQL सर्वर में संग्रहीत प्रक्रियाएँ इनपुट मापदंडों को स्वीकार कर सकती हैं और आउटपुट मापदंडों के कई मान लौटा सकती हैं; SQL सर्वर में, संग्रहीत कार्यविधियाँ डेटाबेस में संचालन करने और कॉलिंग प्रक्रिया या बैच के लिए स्थिति मान वापस करने के लिए प्रोग्राम स्टेटमेंट्स को संग्रहीत करती हैं।
SQL सर्वर में संग्रहीत कार्यविधियों का उपयोग करने के लाभ
वे मॉड्यूलर प्रोग्रामिंग की अनुमति देते हैं। वे तेजी से निष्पादन की अनुमति देते हैं। वे नेटवर्क ट्रैफ़िक को कम कर सकते हैं। उनका उपयोग सुरक्षा तंत्र के रूप में किया जा सकता है।
यहां एक संग्रहीत प्रक्रिया का एक उदाहरण है जो एक पैरामीटर लेता है, एक क्वेरी निष्पादित करता है और एक परिणाम देता है। विशेष रूप से, संग्रहीत कार्यविधि BusinessEntityID को एक पैरामीटर के रूप में स्वीकार करता है और इसका उपयोग अनुरोधकर्ता कर्मचारी को वापस करने के लिए HumanResources.Employee तालिका की प्राथमिक कुंजी से मेल खाने के लिए करता है।
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
मैंने इसे आवश्यक.कॉम से सीखा ... यह बहुत उपयोगी है।
संग्रहीत कार्यविधियों में केवल एक बार लिखा जाता है और क्लाइंट और सर्वर के बीच नेटवर्क ट्रैफ़िक को कम करता है। हम Sql Injection हमलों से भी बच सकते हैं।
ORM
पसंदEntity Framework
करने के लिए संग्रहीत प्रक्रिया का मतलब हैCRUD
?