2009-02-10 16 views
70

मैं SQLite के लिए एमएस एसक्यूएल सर्वर से इस लाइन बंदरगाह के लिए कोशिश कर रहा हूँ में मौजूद है कैसे करना हैनहीं SQLite

IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received') 
    INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received'); 

ऐसा लगता है कि SQLite मौजूद नहीं है या कम से कम मैं यह नहीं कर सकते हैं का समर्थन नहीं करता काम। क्या मुझे कुछ आसान याद आ रही है? क्या आसपास कोई काम है?

उत्तर

108

इस बारे में कैसे?

INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received' 

(। Untested है के रूप में मैं SQLite नहीं है ... लेकिन this link काफी वर्णनात्मक है)

साथ ही, यह भी काम करना चाहिए:

INSERT INTO EVENTTYPE (EventTypeName) 
SELECT 'ANI Received' 
WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received'); 
+12

धन्यवाद। हालांकि, यह ध्यान दिया जाना चाहिए कि इन्सर्ट या इग्नोर टुकड़ा केवल तभी काम करता है जब EventTypeName अद्वितीय हो। – AngryHacker

+2

सच है। मैंने माना कि यह अद्वितीय था कि नमूना एसक्यूएल में इसका इस्तेमाल कैसे किया गया था। यदि नहीं, तो दूसरी विधि का उपयोग किया जाना चाहिए। – beach

+0

यदि इवेंट टाइप नाम अद्वितीय नहीं है तो दूसरी विधि वास्तव में उपयोग की जा सकती है? मैं कुछ ऐसा करने की कोशिश कर रहा हूं और मुझे लगता है कि चयन जहां मौजूद नहीं है, खंड कई पंक्तियों को वापस कर रहा है, वास्तव में प्रत्येक पंक्ति जहां (समकक्ष) EventTypeName! = 'ANI प्राप्त' सत्य है। – Michael

1

तुम भी एक बाधा सेट कर सकते हैं कुंजी फ़ील्ड वाली तालिका पर और कॉन्फ़्लिक्ट पर सेट करें "अनदेखा करें"

जब लागू बाधा उल्लंघन होता है, तो IGNORE रिज़ॉल्यूशन एल्गोरिदम एक पंक्ति को छोड़ देता है जिसमें बाधा उल्लंघन होता है और SQL कथन के बाद की पंक्तियों को संसाधित करता रहता है जैसे कुछ भी गलत नहीं हुआ। पंक्तियों से पहले और बाद में अन्य पंक्तियां जिनमें शामिल था, बाधा उल्लंघन सामान्य रूप से डाला या अपडेट किया जाता है। IGNORE संघर्ष समाधान एल्गोरिदम का उपयोग होने पर कोई त्रुटि लौटा दी गई है।

SQLite Documentation

4

आप मौजूदा मूल्य की प्रविष्टि को अनदेखा करना चाहते हैं, आपकी तालिका में एक कुंजी क्षेत्र होना चाहिए। बस के साथ प्राथमिक कुंजी फील्ड की तरह एक तालिका बनाने:

CREATE TABLE IF NOT EXISTS TblUsers (UserId INTEGER PRIMARY KEY, UserName varchar(100), ContactName varchar(100),Password varchar(100)); 

और फिर टेबल की तरह डालें या बदलने/डालने या ध्यान न दें क्वेरी:

INSERT OR REPLACE INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('1','UserName','ContactName','Password'); 

यह उसे पुन: दर्ज मौजूदा प्राथमिक नहीं दूँगी मुख्य मूल्य ... यह है कि आप कैसे जांच सकते हैं कि तालिका में कोई मान मौजूद है या नहीं।