sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server använder EXEC/sp_executesql eller bara vanlig sql i lagrad procedur?

Ser ingen anledning att använda dynamisk SQL här. När du gör behöver använda dynamisk SQL bör du överväga sp_executesql högre i preferens än EXEC() . Det finns en mängd olika anledningar, inklusive:

  1. sp_executesql är mer benägna att återanvända frågeplaner (se Dynamisk SQL - EXEC(@SQL) kontra EXEC SP_EXECUTESQL(@SQL) );

  2. det är mycket lättare att skicka in starkt skrivna parametrar till sp_executesql (motverka SQL-injektion bättre än att sammanfoga en sträng); och,

  3. du kan också hämta variabler från det dynamiska SQL-omfånget tillbaka till det anropande omfånget, till exempel:

Det är inte ett särskilt användbart exempel, men det är ett vanligt problem när man kör dynamiska strängar. Men mer till saken, du bör bara överväga dynamisk SQL när du måste, inte som en första utväg.




  1. Hur ansluter jag mySQL i mitt Android-projekt?

  2. Mysql exkludera poster

  3. Hur man använder pandor för att göra upsert i SqlAlchemy

  4. Orsakas av:org.postgresql.util.PSQLEUndantag:FATAL:återstående anslutningsplatser är reserverade för superanvändaranslutningar som inte är replikerande