EXEC ve sp-execute-sql ile dinamik SQL kullanma

Tamamlandı

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:

  1. EXECUTE veya EXEC anahtar sözcükleri.
  2. 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";