sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:Tabellvärdade funktioner kontra lagrade procedurer

En inline-tabellvärderad funktion (TVF) är som ett makro:den utökas till den yttre frågan. Den har ingen plan som sådan:den anropande SQL har en plan.

En TVF med flera påståenden har en plan (kommer att hitta en referens).

TVFs är användbara där du vill variera SELECT-listan för en parameterinställd ingång. Inline TVF utökas och det yttre valet/var kommer att övervägas av optimeraren. För TVF med flera påståenden är optimering inte riktigt möjlig eftersom den måste köras tills den är slutförd, filter.

Personligen skulle jag använda en lagrad proc över en TVF med flera uttalanden. De är mer flexibla (t.ex. tips, kan ändra tillstånd, SÄTTA INGEN ANTAL PÅ, SÄTTA XACTABORT etc).

Jag har inga invändningar mot inline-TVF:er men jag brukar inte använda dem för klientinriktad kod på grund av oförmågan att använda SET och ändra tillstånd.



  1. Fatalt fel:Anrop till odefinierad metod mysqli_stmt::get_result()

  2. Förstå Dirty Read-problem med SQL Server

  3. UNION resultatet av flera lagrade procedurer

  4. Använd PARSENAME() för att returnera en del av ett objektnamn i SQL Server