(Questa risposta ha a che fare con le istruzioni SQL stesse e non con il modo in cui vengono distribuite.)
Non penso che lo definirei standard, ma l'approccio più comune che ho visto è quello di utilizzare il sottoinsieme "minimo comune denominatore" delle funzionalità SQL supportato da tutte le piattaforme di destinazione. Ad esempio, se una delle piattaforme di destinazione non supporta le espressioni di tabella comuni, non utilizzerai mai espressioni di tabella comuni.
Questo approccio elimina la flessibilità SQL e alcune prestazioni per la flessibilità di implementazione.
Alcune varianti SQL possono essere mascherate dalla sostituzione delle macro al momento della compilazione. Una macro potrebbe espandersi su una funzione DATE_ADD()
su una piattaforma e su un valore datetime + un valore intervallo su un'altra. Questo può avvicinarti a prestazioni ottimali su tutte le piattaforme di destinazione per un sottoinsieme leggermente più ampio di funzionalità del linguaggio SQL, ma può essere un vero problema da mantenere.
L'approccio a forza bruta consiste nel mantenere un insieme di differenze specifiche della piattaforma per tutte le istruzioni SQL. Dichiarazioni semplici come SELECT * FROM TABLENAME
possono essere condivise su tutte le piattaforme; dichiarazioni più complesse che sfruttano funzionalità o sintassi specifiche della piattaforma hanno versioni diverse per ogni piattaforma. Secondo la mia esperienza, questo approccio richiede un sacco di test automatici per assicurarsi che tutte le piattaforme si comportino allo stesso modo.
Non ci ho pensato molto, ma penso che più la piattaforma-agnostica vuoi essere, più è probabile che tu debba finire vicino all'approccio forza-bruta. Quanto è difficile? Bene, i candidati più probabili sono gli strumenti CASE del database e le utilità dello schema del database, e non ce ne sono molti che mirano a più di una manciata di piattaforme attuali. Suppongo che sia molto difficile.