EXEC और sp-execute-sql के साथ डायनेमिक SQL का उपयोग करें
डायनेमिक एसक्यूएल आपको एक चरित्र स्ट्रिंग बनाने की अनुमति देता है जिसे संग्रहीत कार्यविधियों के विकल्प के रूप में टी-एसक्यूएल के रूप में निष्पादित किया जा सकता है। डायनेमिक एसक्यूएल तब उपयोगी होता है जब आप निष्पादन समय तक कुछ मानों को नहीं जानते हैं।
गतिशील SQL बनाने के दो तरीके हैं, या तो उपयोग करके:
- EXECUTE या EXEC कीवर्ड।
- सिस्टम संग्रहीत कार्यविधि sp_executesql।
EXECUTE या EXEC का उपयोग करके डायनेमिक SQL
EXECUTE या EXEC के साथ डायनेमिक SQL स्टेटमेंट लिखने के लिए, सिंटैक्स है:
EXEC (@string_variable);
निम्नलिखित उदाहरण में, हम VARCHAR प्रकार का एक चर @sqlstring घोषित करते हैं, और फिर इसे एक स्ट्रिंग असाइन करते हैं।
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
डायनेमिक SQL Sp_executesql का उपयोग कर रहा है
Sp_executesql आपको पैरामीटर के साथ एक T-SQL स्टेटमेंट निष्पादित करने की अनुमति देता है। Sp_executesql उपयोग संग्रहीत कार्यविधियों के बजाय किया जा सकता है जब आप कथन के लिए एक अलग मान पास करना चाहते हैं। T-SQL कथन वही रहता है, और केवल पैरामीटर मान बदलते हैं। संग्रहीत कार्यविधियों की तरह, यह संभावना है कि SQL Server क्वेरी ऑप्टिमाइज़र निष्पादन योजना का पुन: उपयोग करेगा।
Sp_executesql एक तर्क के रूप में एक टी-एसक्यूएल स्टेटमेंट लेता है, जो या तो यूनिकोड स्थिरांक या यूनिकोड चर हो सकता है। उदाहरण के लिए, ये दोनों कोड उदाहरण मान्य हैं:
DECLARE @sqlstring1 NVARCHAR(1000);
SET @SqlString1 =
N'SELECT TOP(10) name, listprice
FROM SalesLT.Product
GROUP BY name, listprice
ORDER BY listprice DESC;'
EXECUTE sp_executesql @SqlString1;
OR
EXECUTE sp_executesql N'SELECT TOP(10) name, listprice
FROM SalesLT.Product
GROUP BY name, listprice
ORDER BY listprice DESC;'
इस उदाहरण में, T-SQL कथन के लिए एक पैरामीटर पास किया जा रहा है:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";