Domanda

Voglio scrivere alcune domande che possono funzionare in quasi tutti i database senza alcuna SQLExceptions. Allora, dove posso ottenere gli standard ANSI di scrivere le query?

È stato utile?

Soluzione

Non sono sicuro che ti aiuto.

I fornitori sono touch e vanno fino a implementazione standard e spesso le norme stesse sono imprecise tale abbastanza che si potrebbe mai scrivere una query che funzionerebbe con tutti gli implementatori.

Ad esempio, SQL 92 definisce l'operatore di concatenazione come || ma né MySQL MSSQL né utilizzano questo (Oracle fa). Produttore indipendente concatenazione di stringhe è impossibile.

Allo stesso modo, un carattere di escape standard non specificato in modo da come ha gestito che potrebbe non funzionare in tutti i fornitori.

Dopo aver detto che:

Altri suggerimenti

wikipedia :

  

Lo standard SQL non è liberamente disponibile. L'intera serie può essere acquistato dalla ISO come ISO / IEC 9075 (1-4,9-11,13,14): 2008.

Tuttavia non vorrei vi consiglio di seguire questa strategia, perché nessun motore di database segue qualsiasi standard SQL (SQL 99, 2003, etc.) alla lettera. Tutti loro prendersi delle libertà nel modo in cui gestiscono istruzioni o definiscono le variabili (ad esempio, quando si confrontano due stringhe differenti motori maniglia caso di sensibilità in modo diverso). Un metodo che è molto efficiente con un motore può essere terribile inefficiente per un altro.

Un suggerimento sarebbe quello di sviluppare un gruppo standard di query e di sviluppare diverse classi che contengono l'implementazione specifica di quella query per un certo RDBMS di destinazione.

Spero che questo ha aiutato

Controlla la BNF di SQL nucleo grammatiche disponibili alla pagina http://savage.net.au/SQL /

Questa è parte della risposta - il resto, come le punte da Kiranu e MattMitchell, è che diversi fornitori implementano lo standard in modo diverso. No DBMS aderisce perfettamente anche SQL-92, anche se la maggior parte sono molto vicino.

Una sola osservazione: lo standard SQL non dice nulla sugli indici - quindi non c'è alcuna sintassi standard per la creazione di un indice. Si dice anche nulla su come creare un database; ogni fornitore ha i suoi meccanismi per farlo.

Il SQL-92 standard di è probabilmente il quello che si desidera raggiungere. Credo che sia supportata la maggior parte dei principali RDBMS.

Ecco un meno concisa link . contenuti di esempio:

  • PostgreSQL ha viste. Viaggi standard, non permettendo aggiornamenti di vista ...
  • DB2 Conforme ad almeno SQL-92.
  • MSSQL Conforme ad almeno SQL-92.
  • MySQL Conforme ad almeno SQL-92.
  • Oracle Conforme ad almeno SQL-92.
  • Informix Conforme ad almeno SQL-92.

Un'altra cosa che si potrebbe prendere in considerazione, se si sta utilizzando .NET, è quello di utilizzare il modello di fabbrica in System.Data.Common che fa un buon lavoro di astrarre specifiche del provider per un certo numero di RDBMS.

Se si sta tentando di fare un prodotto che funziona contro la più database penso cercando di utilizzare solo SQL standard non è la strada da percorrere, come altre risposte hanno indicato, a causa delle diverse 'interpretazioni' della norma. Invece si dovrebbe, se possibile, avere una sorta di strato di accesso ai dati nella propria applicazione, che ha diverse implementazioni specifiche per ogni database. A seconda di cosa si sta cercando di fare, ci sono strumenti come Hibernate che sarà così un sacco di sollevamento di carichi pesanti con riferimento a questa per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top