Vraag: TOP 10 rijen ophalen zonder TOP of LIMIT te gebruiken?
Antwoord: Toen mij deze vraag werd gesteld in mijn recente Uitgebreide statuscontrole voor databaseprestaties , vroeg ik de persoon terug waarom hij het wiel opnieuw wil uitvinden. Toen ik echter zijn antwoord ontving, ben ik het nu echt eens met de redenering.
Dit is de reden: We willen TOP of LIMIT niet gebruiken omdat het eigenlijk geen ANSI-implementatie is. We willen de bovenste rijen op zo'n manier ophalen dat deze in verschillende databases kan werken, zoals SQL Server, MySQL, MariaDB en PostgreSQL.
Alle databases hebben hun eigen logica geïmplementeerd om de bovenste rijen op te halen. SQL Server gebruikt TOP trefwoorden, terwijl MySQL, MariaDB en PostgreSQL de LIMIT . gebruiken trefwoord om de rijen in de SQL Server te beperken. Dit biedt unieke uitdagingen voor externe leveranciers die code schrijven die in elk RDBMS kan worden aangesloten. Ze moeten code schrijven met voorwaarden en twee verschillende versies van de logica onderhouden. Als u echter de volgende methode gebruikt, werkt deze in alle recente versies van de relationele databases.
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) ALS ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_EDURETYPE='Dit werkt met alle bekende relationele databases die ik ben tegengekomen. Hoewel we TOP en LIMIT graag vaak gebruiken, is het aan te raden om de logica te blijven gebruiken die in meerdere relationele databases werkt. Hier zijn andere blogposts die je misschien interessant vindt:
- SQL SERVER - Priority Boost Server-configuratieoptie uitschakelen op SSMS 18 en later
- SQL SERVER – Voorbeeldscript om indexfragmentatie te controleren met RowCount
- SQL-puzzel - Schema- en tabelcreatie - Antwoord zonder code uit te voeren
- Hoe weet ik of de index wordt geforceerd bij zoekopdrachten? – Interviewvraag van de week #246