Dynaamisen SQL:n käyttö EXEC:n ja sp-execute-sql:n kanssa
Dynamic SQL:n avulla voit luoda merkkimerkkijonon, joka voidaan suorittaa T-SQL:nä vaihtoehtona tallennetuille toimintosarjoille. Dynaamisesta SQL:stä on hyötyä, kun et tiedä tiettyjä arvoja ennen suoritusaikaa.
Dynaamisen SQL:n luomiseen on kaksi tapaa, joko seuraavia:
- EXECUTE- tai EXEC-avainsanat .
- Järjestelmän tallentamisen toimintosarja sp_executesql.
Dynaaminen SQL, joka käyttää EXECUTE- tai EXEC-funktiota
Jos haluat kirjoittaa dynaamisen SQL-lauseen EXECUTE- tai EXEC-funktiolla, syntaksi on seuraava:
EXEC (@string_variable);
Seuraavassa esimerkissä esitellään muuttuja @sqlstring , jonka tyyppi on VARCHAR, ja määritetään sille merkkijono.
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
Dynaamista SQL:ää Sp_executesql käyttämällä
Sp_executesql avulla voit suorittaa T-SQL-lausekkeen parametreilla. Sp_executesql voidaan käyttää tallennettujen toimintosarjojen sijaan, kun haluat välittää lausekkeelle eri arvon. T-SQL-lauseke pysyy samana, ja vain parametriarvot muuttuvat. Tallennettujen toimintosarjojen tavoin on todennäköistä, että SQL Serverin kyselyoptimointi käyttää suoritussuunnitelmaa uudelleen.
Sp_executesql käyttää argumenttina T-SQL-lauseketta, joka voi olla joko Unicode-vakio tai Unicode-muuttuja. Molemmat koodiesimerkit ovat esimerkiksi kelvollisia:
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ässä esimerkissä parametri välitetään T-SQL-lauseeseen:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";