EXEC और sp-execute-sql के साथ डायनेमिक SQL का उपयोग करें

Complete

डायनेमिक एसक्यूएल आपको एक चरित्र स्ट्रिंग बनाने की अनुमति देता है जिसे संग्रहीत कार्यविधियों के विकल्प के रूप में टी-एसक्यूएल के रूप में निष्पादित किया जा सकता है। डायनेमिक एसक्यूएल तब उपयोगी होता है जब आप निष्पादन समय तक कुछ मानों को नहीं जानते हैं।

गतिशील SQL बनाने के दो तरीके हैं, या तो उपयोग करके:

  1. EXECUTE या EXEC कीवर्ड।
  2. सिस्टम संग्रहीत कार्यविधि 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";