استخدام SQL الديناميكي مع EXEC وsp-execute-sql
يسمح لك Dynamic SQL بإنشاء سلسلة أحرف يمكن تنفيذها ك T-SQL كبديل للإجراءات المخزنة. يعد Dynamic SQL مفيدا عندما لا تعرف قيما معينة حتى وقت التنفيذ.
هناك طريقتان لإنشاء SQL ديناميكي، إما باستخدام:
- كلمات EXECUTE أو EXEC الأساسية.
- 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";