sql >> Database >  >> RDS >> Sqlserver

SQL Server:functies met tabelwaarde versus opgeslagen procedures

Een inline tabel gewaardeerd functie (TVF) is als een macro:het is uitgebreid naar de buitenste query. Het heeft als zodanig geen plan:de aanroepende SQL heeft een plan.

Een TVF met meerdere verklaringen heeft een plan (zal een referentie vinden).

TVF's zijn handig wanneer u de SELECT-lijst voor een geparametreerde invoer wilt variëren. Inline TVF's worden uitgebreid en de buitenste selectie/waar wordt door de optimizer overwogen. Voor multi-statement TVF's is optimalisatie niet echt mogelijk omdat het moet worden voltooid, dan filter.

Persoonlijk zou ik een opgeslagen proces gebruiken in plaats van een TVF met meerdere instructies. Ze zijn flexibeler (bijv. hints, kunnen de status wijzigen, STEL NOCOUNT IN, SET XACTABORT enz.).

Ik heb geen bezwaar tegen inline TVF's, maar gebruik ze niet voor client-facing code vanwege het onvermogen om SET te gebruiken en de status te wijzigen.



  1. Postgis installatie:type geometrie bestaat niet

  2. Batch invoegen met native SQL in Hibernate

  3. Hoe de INSTR()-functie werkt in MySQL

  4. Mysql Max met Groeperen op zoekopdracht