استخدام SQL الديناميكي مع EXEC وsp-execute-sql

مكتمل

يسمح لك Dynamic SQL بإنشاء سلسلة أحرف يمكن تنفيذها ك T-SQL كبديل للإجراءات المخزنة. يعد Dynamic SQL مفيدا عندما لا تعرف قيما معينة حتى وقت التنفيذ.

هناك طريقتان لإنشاء SQL ديناميكي، إما باستخدام:

  1. كلمات EXECUTE أو EXEC الأساسية.
  2. sp_executesql الإجراء المخزن للنظام.

Dynamic SQL باستخدام EXECUTE أو EXEC

لكتابة عبارة SQL ديناميكية مع EXECUTE أو EXEC، يكون بناء الجملة:

EXEC (@string_variable);

في المثال التالي، نعلن عن متغير يسمى @sqlstring من نوع VARCHAR، ثم نعين سلسلة إليه.

DECLARE @sqlstring AS VARCHAR(1000);
    SET @sqlstring='SELECT customerid, companyname, firstname, lastname 
    FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO

Dynamic SQL باستخدام Sp_executesql

يسمح لك Sp_executesql بتنفيذ عبارة T-SQL مع المعلمات. يمكن استخدام Sp_executesql بدلا من الإجراءات المخزنة عندما تريد تمرير قيمة مختلفة إلى العبارة . تظل عبارة T-SQL كما هي، وتتغير قيم المعلمات فقط. مثل الإجراءات المخزنة، من المحتمل أن يقوم محسن استعلام SQL Server بإعادة استخدام خطة التنفيذ.

يأخذ Sp_executesql عبارة T-SQL كوسيطة، والتي يمكن أن تكون إما ثابت Unicode أو متغير Unicode. على سبيل المثال، كلا المثالين من التعليمات البرمجية صالحان:

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";