Bruk dynamisk SQL med EXEC og sp-execute-sql

Fullført

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:

  1. EXECUTE - eller EXEC-nøkkelord .
  2. 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";