2010-08-26 11 views
10

क्या एक डेटाबेस की एक SQL क्वेरी से दूसरे में कनवर्ट करने का कोई टूल है?एक अलग डेटाबेस के लिए SQL क्वेरी कनवर्ट करें

एसक्यूएल सर्वर

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

लिए SQLite

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

के लिए इसी तरह यह Oracle और SQL सर्वर के लिए अलग है। विदेशी कुंजी बाधाओं में घोषणापत्र में, यदि कोई उपकरण है तो हम किसी भी डेटाबेस से किसी भी डेटाबेस से एसक्यूएल प्राप्त कर सकते हैं, यह मेरे लिए वास्तव में सहायक होगा।

मैं इस तरह एक समारोह बनाया है, लेकिन यह एक अच्छा समाधान हो प्रतीत नहीं होता:

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); 
} 

इसी SQLite के लिए, संयोजन किया जाता है || का उपयोग करते समय एसक्यूएल सर्वर में यह + उपयोग किया जाता है।

+1

"एक अलग डेटाबेस के लिए SQL क्वेरी कन्वर्ट" बस कि Oracle से MSSQL करने के लिए इस तरह पोर्ट किया गया एक 3 पार्टी अनुप्रयोग की समीक्षा की। उन्होंने SEQUENCES को लागू करने के लिए कोड लिखा था। साधारण मामलों को छोड़कर, आरडीबीएमएस स्विच करने से डाटाबेस का एक नया स्वरूप भी शामिल होना चाहिए। – Bill

+0

अगर आपको वह जानकारी मिलती है तो उसे उत्तर के रूप में चिह्नित करने के लिए मत भूलना .. –

उत्तर

6

SwisSQL Console 5.0

कंसोल एक पल त्वरित और विश्वसनीय SQL क्वेरी रूपांतरण उपयोगिता कि माइग्रेशन को तेज करता है प्रदान समाधान प्रदान करता है। कंसोल ओरेकल, एसक्यूएल सर्वर, आईबीएम डीबी 2, माईएसक्यूएल, साइबेस, पोस्टग्रेएसक्यूएल, इनफॉर्मिक्स और नेटजेज़ा डेटाबेस में माइग्रेशन का समर्थन करता है। इस सॉफ़्टवेयर में लक्षित डेटाबेस में कनवर्ट किए गए SQLs का परीक्षण करने के लिए सुविधाएं भी हैं।

+0

मुझे लगता है कि यह एकमात्र टूल है! लेकिन ऐसा क्यों है, ऐसे उपकरण कई लोगों द्वारा विकसित किए जाने चाहिए, मैं भी एक विकसित करने के बारे में सोच रहा हूं! – Thunder

+0

@ थंडर: एसक्यूएल एक बेहद जटिल भाषा है और प्रत्येक विक्रेता की एक अलग बोली है। एक बोली से दूसरे में अनुवाद करना 100% सही प्राप्त करना बहुत मुश्किल है। यही कारण है कि ऐसा कई उपकरण नहीं हैं जो ऐसा करते हैं। ऐसे कई टूल भी नहीं हैं जो कई डेटाबेस के साथ वास्तव में अच्छी तरह से काम करते हैं। –

2

यदि मैं एकाधिक डेटाबेस प्रबंधन प्रणालियों का समर्थन करना चाहता था, तो मैं प्रत्येक सिस्टम के लिए डेटा एक्सेस लेयर के साथ इसे पूरी तरह से करूँगा। इसके लिए निश्चित रूप से कुछ काम की आवश्यकता होगी, लेकिन मॉड्यूलरिटी काफी फायदेमंद होगी।

एक विकल्प मैं काफी खुश हूं, DevExpress 'XPO है। यह एक ऑब्जेक्ट रिलेशनल मैपिंग सिस्टम है जो एकाधिक डेटाबेस का समर्थन करता है। आप अपनी कक्षाएं डिज़ाइन करते हैं, उचित कनेक्शन स्ट्रिंग को परिभाषित करते हैं, और डेटाबेस स्कीमा आपके लिए बनाया जाएगा, और आप आसानी से कोड में अपनी कक्षाओं में क्रूड लागू कर सकते हैं। एक अलग डेटाबेस सिस्टम का उपयोग करने के लिए, केवल कनेक्शन स्ट्रिंग बदलें!

और नहीं, मैं DevExpress से बहुत खुश ग्राहक के अलावा संबद्ध नहीं हूं।

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

4

पहले आप जानते हैं और समझते हैं कि हर एसक्यूएल इंजन एक अलग एसक्यूएल व्याकरण के साथ काम करता है की जरूरत है। एसक्यूएल एएनएसआई मानक के बावजूद, पृथ्वी पर कोई भी भाषा 100% का सम्मान नहीं करती है। इसके अलावा, हर बड़े और ज्ञात एसक्यूएल इंजन मूल व्याकरण में अपनी विधियों और सामान जोड़ता है।

तो, यदि आप रूपांतरण करना चाहते हैं, तो मध्य एसक्यूएल परत प्राप्त करने का सबसे आसान तरीका है। इसका मतलब है, प्रत्येक ज्ञात एसक्यूएल इंजन में बहुत आम सुविधाओं से एक अज्ञेयवादी एसक्यूएल व्याकरण बनाने के लिए (इसके परिणामस्वरूप एसक्यूएल ansi और प्रत्येक इंजन में मौजूद प्रत्येक सुविधा जैसे टॉप की तरह कुछ होगा)। एक बार आपके पास यह हो जाने के बाद, आपको इस मध्य परत में रूपांतरण करना होगा, और प्रत्येक मध्य भिन्नता के लिए इस मध्यम परत से आपको आवश्यकता होगी।

मैंने आपको यह बताया क्योंकि मुझे अपने काम पर यह सटीक चीज़ चाहिए, और यह वास्तव में इसे प्राप्त करने का एकमात्र तरीका था, और इसे पुन: प्रयोज्य बना दिया गया। एक उपकरण होने से आपको वास्तव में प्रत्येक प्रश्न को मैन्युअल रूप से परिवर्तित करने का काम मिलता है, और क्वेरी चुनने के लिए विशाल स्विचेस बनाते हैं, या प्रत्येक इंजन के लिए विरासत कक्षा प्राप्त होती है।

मैं आपको बताता हूं कि मैंने क्या किया है: मैंने अपने एसक्यूएल मध्य व्याकरण के बीएनएफ को बनाया, फिर सी # के लिए गोल्डपार्सर के साथ एक पेड़ पार्सर बनाया।फिर मैंने प्रत्येक एसक्यूएल बोली में परिवर्तित होने के लिए व्याकरण में प्रत्येक नियम के लिए व्यक्तिगत नियम बनाए। यह एक बड़ी और थकाऊ नौकरी है, मुझे पता है। लेकिन उन्होंने मुझे ऐसा करने के लिए भुगतान किया ...

यदि आपके पास इसे पूरा करने का समय नहीं है, तो आप ओडीबीसी का उपयोग कर सकते हैं। प्रत्येक एसक्यूएल इंजन में ओडीबीसी कनेक्टर होता है, और ओडीबीसी स्वयं एक मध्यम सार परत के रूप में कार्य करेगा। लेकिन, यह उतना खुश नहीं है जितना लगता है, क्योंकि केवल सरल प्रश्न ही इस भ्रम को बनाए रखेंगे ... यूनियन, जॉइन और मेटाडाटा निर्माण जैसी हार्ड चीजें समान नहीं होंगी।

मुझे आशा है कि यह मदद की,

सौभाग्य

+1

मैं अपने सॉफ्टवेयर उत्पाद के लिए एमएसएसएलएल, ओरेकल, माईएसक्यूएल, एक्सेस के लिए एसक्यूएल क्वेरी को कन्वर्ट करने के लिए एक ही स्थिति को पूरा करने के लिए हुआ। क्या आप अपना कोड ओपन सोर्स बना सकते हैं? मुझे लगता है कि यह शुरुआती लोगों के लिए सहायक होगा। धन्यवाद आपका काम। –

1

यह वह जगह है नहीं एक स्वचालित उपकरण है, लेकिन सबसे अच्छा संसाधन मैं अलग एसक्यूएल कार्यान्वयन के बीच मतभेदों को समझने के लिए मिल गया है O'Reilley के एसक्यूएल कुकबुक है एंथनी मोलिनारो द्वारा। http://oreilly.com/catalog/9780596009762/

उन्होंने ओरेकल, एसक्यूएल सर्वर, DB2, MySQL और Postgres के लिए पक्ष समाधान से कंधा मिलाकर पेश करने के लिए जब वे अलग वाक्य रचना या स्वामित्व सुविधाओं का उपयोग सहित चालाक एसक्यूएल प्रश्नों के साथ कई अलग अलग समस्याओं, हल करने के लिए कैसे पता चलता है। एक अलग डेटाबेस के साथ काम करने के लिए अपने कोड को बदलना बहुत आसान है क्योंकि वे सिस्टम कैसे भिन्न होते हैं।

मोलिनेरो खिड़की के प्रश्नों (या ओरेकल विश्लेषणात्मक प्रश्नों को कॉल करता है) को समझाने का एक अच्छा काम करता है, जो सीखने के समय के बराबर है, क्योंकि आप पहले से ही कस्टम क्लाइंट कोड को बैंडविड्थ बर्बाद करने वाले प्रश्न के साथ बहुत कुशलतापूर्वक पूरा कर सकते हैं और समय।

-1

मुझे diff डेटाबेस

के लिए क्वेरी कनवर्टर के बारे में जानकारी दे thats अपने लेख

संबंधित मुद्दे