Domanda: Recupera le prime 10 righe senza utilizzare TOP o LIMIT?
Risposta: Quando mi è stata posta questa domanda nel mio recente controllo completo dello stato delle prestazioni del database , ho chiesto di nuovo alla persona perché vuole reinventare la ruota. Tuttavia, quando ho ricevuto la sua risposta, ora sono davvero d'accordo con il ragionamento.
Ecco il motivo: Non vogliamo utilizzare TOP o LIMIT poiché in realtà non sono un'implementazione ANSI. Vogliamo recuperare le prime righe in modo tale che possa funzionare su diversi database come SQL Server, MySQL, MariaDB e PostgreSQL.
Tutti i database hanno implementato la propria logica per recuperare le prime righe. SQL Server utilizza TOP parole chiave mentre MySQL, MariaDB e PostgreSQL utilizzano il LIMIT parola chiave per limitare le righe in SQL Server. Ciò presenta sfide uniche per i fornitori di terze parti che scrivono codice che può essere collegato a qualsiasi RDBMS. Devono scrivere le condizioni delle streghe del codice e mantenere due diverse versioni della logica. Tuttavia, se utilizzi il metodo seguente, funzionerà in tutte le versioni recenti dei database relazionali.
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION FROM ( SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION, ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) AS ROWNUM FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='PROCEDURE' ) T WHERE ROWNUM <11;
Funzionerà con tutti i database relazionali conosciuti che ho incontrato. Sebbene amiamo usare spesso TOP e LIMIT, si consiglia di continuare a utilizzare la logica che funziona su più database relazionali.
Ecco altri post del blog che potresti trovare interessanti:
- SQL SERVER – Disattivazione dell'opzione di configurazione del server Priority Boost su SSMS 18 in poi
- SQL SERVER – Script di esempio per controllare la frammentazione dell'indice con RowCount
- SQL Puzzle – Creazione di schemi e tabelle – Risposte senza eseguire codice
- Come sapere se l'indice è forzato sulla query? – Intervista Domanda della settimana #246