Dinamikus SQL használata EXEC és sp-execute-sql használatával
A dinamikus SQL lehetővé teszi egy karaktersztring összeállítását, amely T-SQL-ként végrehajtható a tárolt eljárások alternatívaként. A dinamikus SQL akkor hasznos, ha nem ismer bizonyos értékeket a végrehajtási időig.
A dinamikus SQL-t kétféleképpen hozhatja létre a következő módokon:
- EXECUTE vagy EXEC kulcsszavak.
- A rendszer által tárolt eljárás sp_executesql.
Dinamikus SQL EXECUTE vagy EXEC használatával
Dinamikus SQL-utasítás execute vagy EXEC használatával történő írásához a szintaxis a következő:
EXEC (@string_variable);
Az alábbi példában egy VARCHAR típusú változót @sqlstring deklarálunk, majd egy sztringet rendelünk hozzá.
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
Dinamikus SQL Sp_executesql használatával
Sp_executesql lehetővé teszi egy T-SQL-utasítás paraméterekkel való végrehajtását. Sp_executesql használható a tárolt eljárások helyett, ha egy másik értéket szeretne átadni az utasításnak. A T-SQL utasítás változatlan marad, és csak a paraméterértékek változnak. A tárolt eljárásokhoz hasonlóan valószínű, hogy az SQL Server lekérdezésoptimalizálója újra felhasználja a végrehajtási tervet.
Sp_executesql argumentumként egy T-SQL-utasítást használ, amely Unicode-állandó vagy Unicode-változó lehet. Például mindkét kód példa érvényes:
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;'
Ebben a példában a rendszer egy paramétert ad át a T-SQL utasításnak:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";