Mysql
 sql >> Database >  >> RDS >> Mysql

Dividi più istruzioni SQL in singole istruzioni SQL

Non sono affatto sicuro che questo sia possibile. Avresti sicuramente bisogno di una conoscenza approfondita della sintassi SQL del tuo DBMS di destinazione. Ad esempio, appena fuori dalla mia testa questa è una singola istruzione MySQL:

INSERT INTO things
SELECT * FROM otherthings ON DUPLICATE KEY
UPDATE thingness=thingness+1

È probabile che in alcuni DBMS siano presenti costrutti che, senza un delimitatore, potrebbero essere ambigui.

Penso che potresti essere costretto a farlo. È totalmente il modo standard per delimitare le istruzioni SQL. Anche se riesci a trovare un'euristica per rilevare i punti di istruzione probabilmente all'inizio di SQL, rischi disastri come un accidentale "CANCELLA dalle cose" senza la clausola WHERE.

Sarebbe accettabile doppia nuova riga per nuova dichiarazione?

No, anche con delimitatori punto e virgola, regex non è neanche lontanamente abbastanza potente per analizzare SQL. I punti problematici includerebbero:

';'
";"
`;`
'\';'
''';'
-- ;
#;
/*;*/

e l'eventuale interposizione di tali strutture. Accidenti!