2011-01-08 21 views
5

में समान कॉलम मौजूद नहीं है, तो मैं SQLite तालिका में कॉलम कैसे जोड़ सकता हूं यदि केवल उसी कॉलम तालिका में मौजूद न हो?sqlite में तालिका में कॉलम कैसे जोड़ें यदि तालिका

ALTER TABLE का उपयोग करके मैं एक नया कॉलम बनाने में सक्षम हूं लेकिन यह जानना चाहता हूं कि यह कॉलम तालिका में पहले से मौजूद है या नहीं?

+1

आप .schema TableName 'का उपयोग करके तालिका स्तंभ देख सकते हैं – krakover

+1

@krakover एक जवाब है कि नहीं है? –

+0

@goreSplatter वह जो हासिल करने की कोशिश कर रहा है उसके आधार पर। मैंने समझाया कि समस्या से कैसे बचें, इसे कैसे हल करें .. \ – krakover

उत्तर

0

आप .schema TableName 'का उपयोग करके तालिका स्तंभ देख सकते हैं

+2

क्या आप एसक्यूएल उदाहरण दे सकते हैं? – boiledwater

6

SQLite एक त्रुटि देता है की तरह "ऐसी कोई स्तंभ: foo" यदि तालिका स्तंभ शामिल नहीं है:

select foo from yourTable limit 1 

इसके अलावा, आप बनाने की मेज बयान प्राप्त कर सकते हैं:

select sql from sqlite_master where tbl_name = 'YourTableName' 

और उसके बाद परिणाम को पार्स, स्तंभ-नाम की तलाश में। मुझे निर्दिष्ट तालिका के लिए स्तंभों की सूची से पूछताछ करने के लिए एक शानदार तरीका नहीं पता है, हालांकि कोई भी मौजूद हो सकता है।

इसके अलावा, आप यह करने के लिए प्रयास करता है, तो:

alter table YourTable add column foo {column-def whatever it is} 

आप अगर कॉलम पहले से मौजूद SQLite से कोई त्रुटि मिलती है। आप उस त्रुटि को भी जाल कर सकते हैं।

अंत में आप ऐसा कर सकता है:

select sql from sqlite_master 
    where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%'; -- or whatever type 

और अगर निर्दिष्ट तालिका स्तंभ जो क्वेरी में डबल उद्धरण से घिरा हुआ है शामिल है, और प्रकार के साथ आपके द्वारा निर्दिष्ट है, तो आप एक परिणाम मिल जाएगा, अन्यथा एक खाली सेट। डेटाटाइप निर्दिष्ट करना सुनिश्चित करता है कि आपका LIKE सबस्ट्रिंग मैच स्तंभ-नाम पर होता है।

4

कोई भी SQLite क्वेरी में ऐसा करने के लिए कोई रास्ता नहीं है (जिसे मैं जानता हूं)। यदि आपको/Elseness प्रबंधित करने के लिए एप्लिकेशन कोड का उपयोग करना होगा।

चेक तालिका मौजूद है या नहीं करता है, तो:

select count(*) from sqlite_master where type = 'table' and name = MyTable'; 

जांच करें कि स्तंभ तालिका में मौजूद है या अब

pragma table_info(thumbnail); 

हालांकि, एक बेहतर दृष्टिकोण स्पष्ट डेटाबेस स्कीमा स्कीमा संस्करण अपने आवेदन के आधार पर अपडेट किया जा सकता है बनाए रखता है (उदाहरण के लिए स्कीमा संस्करण 1 से 2 तक जाने के लिए तालिका विवरण निर्दिष्ट करें):

pragma user_version; 
0

ऐसा लगता है कि कॉलम मौजूद नहीं है और एक कमांड में नया कॉलम जोड़ना जांचना असंभव है, क्योंकि स्क्लाइट कॉलम के लिए "अगर नहीं है" का समर्थन नहीं करता है। "अगर नहीं है" केवल टेबल पर काम करता है। यहाँ मैं क्या करेंगे है:

rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;"); 

if(rev != SQLITE_OK){ // add col to table 
    ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;"); 
} 
संबंधित मुद्दे