sql >> Database >  >> RDS >> Sqlserver

Gebruikt SQL Server EXEC/sp_executesql of gewoon SQL in de opgeslagen procedure?

Zie hier geen reden om dynamische SQL te gebruiken. Wanneer je doe dynamische SQL moet gebruiken, moet u overwegen sp_executesql hoger in voorkeur dan EXEC() . Er zijn verschillende redenen, waaronder:

  1. sp_executesql heeft meer kans om queryplannen opnieuw te gebruiken (zie Dynamische SQL - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL) );

  2. het is veel gemakkelijker om sterk getypte parameters door te geven aan sp_executesql (het dwarsbomen van SQL-injectie beter dan het aaneenschakelen van een string); en,

  3. u kunt ook variabelen van binnen het dynamische SQL-bereik terugkrijgen naar het aanroepende bereik, bijvoorbeeld:

Dat is geen erg handig voorbeeld, maar het is een veelvoorkomend probleem bij het uitvoeren van dynamische strings. Maar meer ter zake, je zou dynamische SQL alleen moeten overwegen als het moet, niet als eerste redmiddel.




  1. PDO verbinding maken met localhost (onbekende mysql-serverhost)

  2. Is er een manier om in een PostgreSQL-database in te breken als u het wachtwoord bent vergeten?

  3. Postgresql GROUP_CONCAT equivalent?

  4. Verschillende meldingen selecteren en een duidelijker meldingsbericht voorbereiden