Bruk dynamisk SQL med EXEC og sp-execute-sql
Med dynamisk SQL kan du bygge en tegnstreng som kan kjøres som T-SQL som et alternativ til lagrede prosedyrer. Dynamisk SQL er nyttig når du ikke kjenner bestemte verdier før kjøringstiden.
Det finnes to måter å opprette dynamisk SQL på, enten ved hjelp av:
- EXECUTE - eller EXEC-nøkkelord .
- Den lagrede prosedyren for systemet sp_executesql.
Dynamisk SQL ved hjelp av EXECUTE eller EXEC
Hvis du vil skrive en dynamisk SQL-setning med EXECUTE eller EXEC, er syntaksen:
EXEC (@string_variable);
I eksemplet nedenfor erklærer vi en variabel kalt @sqlstring type VARCHAR, og tilordner deretter en streng til den.
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
Dynamisk SQL ved hjelp av Sp_executesql
Sp_executesql lar deg kjøre en T-SQL-setning med parametere. Sp_executesql kan brukes i stedet for lagrede prosedyrer når du vil sende en annen verdi til setningen. T-SQL-setningen forblir den samme, og bare parameterverdiene endres. I likhet med lagrede prosedyrer er det sannsynlig at SQL Server-spørringsoptimalisering vil bruke utførelsesplanen på nytt.
Sp_executesql tar en T-SQL-setning som et argument, som enten kan være en Unicode-konstant eller en Unicode-variabel. Begge disse kodeeksempler er for eksempel gyldige:
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;'
I dette eksemplet sendes en parameter til T-SQL-setningen:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";