sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server bruge EXEC/sp_executesql eller bare almindelig sql i lagret procedure?

Se ingen grund til at bruge dynamisk SQL her. Når du gør skal bruge dynamisk SQL, bør du overveje sp_executesql højere i præference end EXEC() . Der er en række årsager, herunder:

  1. sp_executesql er mere tilbøjelige til at genbruge forespørgselsplaner (se Dynamisk SQL - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL) );

  2. det er meget nemmere at overføre stærkt indtastede parametre til sp_executesql (forhindrer SQL-injektion bedre end at sammenkæde en streng); og,

  3. du kan også få variabler fra det dynamiske SQL-omfang tilbage til det kaldende område, for eksempel:

Det er ikke et meget nyttigt eksempel, men det er et almindeligt problem, når man udfører dynamiske strenge. Men mere til pointen, du bør kun overveje dynamisk SQL, når det er nødvendigt, ikke som en første udvej.




  1. Hvornår indekserer Oracle kolonneværdier null?

  2. Svarende til explode() for at arbejde med strenge i MySQL

  3. RegEx med preg_match for at finde og erstatte en LIGNENDE streng

  4. Datatabeller side 2 af paginering kalder ikke Magnific Popup