EXEC ve sp-execute-sql ile dinamik SQL kullanma
Dinamik SQL, saklı yordamlara alternatif olarak T-SQL olarak yürütülebilen bir karakter dizesi oluşturmanıza olanak tanır. Dinamik SQL, yürütme süresine kadar belirli değerleri bilmediğiniz durumlarda kullanışlıdır.
Dinamik SQL oluşturmanın iki yolu vardır:
- EXECUTE veya EXEC anahtar sözcükleri.
- Sistem saklı yordamı sp_executesql.
EXECUTE veya EXEC kullanarak dinamik SQL
EXECUTE veya EXEC ile dinamik bir SQL deyimi yazmak için söz dizimi şöyledir:
EXEC (@string_variable);
Aşağıdaki örnekte, VARCHAR türünde adlı @sqlstring bir değişken bildirir ve sonra buna bir dize atarız.
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
Sp_executesql kullanarak dinamik SQL
Sp_executesql, parametrelerle bir T-SQL deyimi yürütmenize olanak tanır. Sp_executesql deyimine farklı bir değer geçirmek istediğinizde saklı yordamlar yerine kullanılabilir. T-SQL deyimi aynı kalır ve yalnızca parametre değerleri değişir. Saklı yordamlar gibi, SQL Server sorgu iyileştiricisinin yürütme planını yeniden kullanma olasılığı yüksektir.
Sp_executesql bir T-SQL deyimini bağımsız değişken olarak alır ve bu bir Unicode sabiti veya Unicode değişkeni olabilir. Örneğin, bu kod örneklerinin her ikisi de geçerlidir:
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;'
Bu örnekte, T-SQL deyimine bir parametre geçiriliyor:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";