Pertanyaan Konversi query SQL untuk database yang berbeda


Apakah ada alat untuk mengkonversi dari satu query SQL dari satu database ke yang lain?

Untuk SQLite

> CREATE TABLE ConstantValues(    Id int
> AUTOINCREMENT primary key   ,
> VariableName varchar(50)    , Values
> varchar(150) )

Untuk SQL Server

> CREATE TABLE ConstantValues(    Id
> INTEGER identity(1,1) primary key   ,
> VariableName varchar(50)   , Values
> varchar(150) )

Demikian pula berbeda untuk Oracle dan SQL Server. Juga dalam deklarasi kendala kunci asing, jika ada alat sehingga kita bisa mendapatkan SQL dari database ke database manapun, itu akan sangat membantu bagi saya.

Saya telah membuat fungsi seperti ini, tetapi tampaknya tidak menjadi solusi yang baik:

private string changeSQL(string sql)
{
    switch (dbtype)
    {
        case dbType.SQLite:
            sql = sql.Replace(" int ", " INTEGER ");
            sql = sql.Replace(" identity(1,1) ", " AUTOINCREMENT ");
            break;
        case dbType.MsAscess:
            sql = sql.Replace(" int ", " ");
            sql = sql.Replace(" identity(1,1) ", "");
            sql = sql.Replace("AUTOINCREMENT", "AUTOINCREMENT");

            break;
    }
    return (sql);
}

Demikian pula untuk SQLite, penggabungan dilakukan dengan menggunakan || sementara di SQL Server sudah selesai menggunakan +.


10
2017-08-26 06:08


asal


Jawaban:


SwisSQL Console 5.0

Konsol menawarkan solusi instan yang menyediakan utilitas konversi query SQL cepat dan andal yang mempercepat migrasi. Konsol mendukung migrasi di Oracle, SQL Server, IBM DB2, MySQL, Sybase, PostgreSQL, Informix, dan Netezza databases. Perangkat lunak ini juga memiliki fitur untuk menguji SQL yang dikonversi dalam database target.


6
2017-08-26 06:18



pertama Anda perlu mengetahui dan memahami bahwa setiap mesin SQL bekerja dengan tata bahasa SQL yang berbeda. Meskipun standar SQL ANSI, tidak ada bahasa di dunia yang menghormatinya 100%. Selain itu, setiap mesin SQL besar dan dikenal menambahkan metode dan hal-hal sendiri ke tata bahasa asli.

Jadi, jika Anda ingin melakukan konversi, cara termudah adalah untuk mencapai lapisan SQL tengah. Itu berarti, untuk membuat tata bahasa SQL agnostik dari fitur-fitur yang sangat umum di setiap mesin SQL yang dikenal (itu akan menghasilkan sesuatu seperti SQL ansi plus setiap fitur yang ada di setiap mesin, seperti TOP). Setelah Anda memiliki ini, Anda harus membuat konversi ke lapisan tengah ini, dan dari lapisan tengah ini untuk setiap variasi SQL yang Anda butuhkan.

Saya mengatakan ini kepada Anda karena saya sangat membutuhkan hal ini di tempat kerja saya, dan itulah satu-satunya cara untuk benar-benar mencapainya, dan membuatnya dapat digunakan kembali. Memiliki alat memberi Anda pekerjaan untuk benar-benar secara manual mengkonversi setiap permintaan tunggal, dan membuat SWITCH besar hanya untuk memilih kueri, atau memiliki kelas yang diwariskan untuk setiap mesin.

Saya memberi tahu Anda apa yang telah saya lakukan: Saya membuat BNF dari tatabahasa menengah SQL saya, kemudian membuat parser pohon dengan GoldParser untuk C #. Kemudian saya membuat aturan individu untuk setiap aturan dalam tata bahasa yang akan dikonversi ke masing-masing dialek SQL. Ini pekerjaan yang besar dan membosankan, saya tahu. Tapi mereka membayarku untuk melakukannya ...

Jika Anda tidak punya waktu untuk menyelesaikan ini, Anda bisa menggunakan ODBC. Setiap mesin SQL memiliki konektor ODBC, dan ODBC itu sendiri akan bertindak sebagai lapisan abstrak tengah. Tapi, itu tidak sesukses kedengarannya, karena hanya pertanyaan sederhana yang akan mempertahankan ilusi ini ... hal-hal sulit seperti UNION, JOIN, dan pembuatan metadata tidak akan sama.

Saya harap itu membantu,

semoga berhasil


4
2017-09-09 19:07



Jika saya mendukung beberapa sistem manajemen basis data, saya akan melakukannya secara menyeluruh, dengan Layer Akses Data untuk setiap sistem. Akan membutuhkan sejumlah kerja, tentu saja, tetapi modularitas akan sangat bermanfaat.

Salah satu alternatif yang cukup saya senangi adalah, DevExpress 'XPO. Ini adalah sistem Pemetaan Relasional Objek yang mendukung beberapa basis data. Anda mendesain kelas Anda, menentukan string koneksi yang tepat, dan skema database akan dibuat untuk Anda, dan Anda dapat menerapkan mentah ke kelas Anda dengan mudah dalam kode. Untuk menggunakan sistem basis data yang berbeda, hanya ubah string koneksi!

Dan tidak, saya tidak berafiliasi dengan DevExpress selain sebagai pelanggan yang sangat senang.

http://www.devexpress.com/Products/NET/ORM/info.xml


2
2017-08-26 07:43



Ini bukan alat otomatis, tetapi sumber daya terbaik yang saya temukan untuk memahami perbedaan antara implementasi SQL yang berbeda adalah O'Reilley's SQL Cookbook oleh Anthony Molinaro. http://oreilly.com/catalog/9780596009762/

Dia menunjukkan bagaimana memecahkan banyak masalah yang berbeda dengan query SQL pintar, termasuk menghadirkan solusi berdampingan untuk Oracle, SQL Server, DB2, MySQL dan Postgres ketika mereka menggunakan sintaks yang berbeda atau fitur proprietary. Mengubah kode Anda untuk bekerja dengan database yang berbeda jauh lebih mudah diberikan deskripsi tentang bagaimana sistem mereka berbeda.

Molinaro juga melakukan pekerjaan yang baik untuk menjelaskan pertanyaan-pertanyaan windowing (atau apa yang Oracle sebut query analitik) yang layak waktu untuk belajar, karena Anda dapat mencapai hal-hal yang sangat efisien dengan permintaan yang sebelumnya diperlukan kode klien kustom yang membuang-buang bandwidth dan waktu.


1
2017-09-10 04:24



beri saya detail tentang pengonversi kueri untuk basis data diff

Thats artical Anda "Konversi query SQL untuk database yang berbeda"


-1
2017-08-21 05:03