मैं रिपोर्टिंग के लिए एक जटिल दृश्य के परिणामों को डंप करने के लिए एक साधारण स्क्रिप्ट बनाने की कोशिश कर रहा हूं। मैंने व्यू और टेबल नामों को ट्वीक करने के लिए समानार्थी शब्द का उपयोग किया है।मैं कैसे जांच सकता हूं कि समानार्थी के पीछे तालिका मौजूद है
विचार यह है कि स्क्रिप्ट का उपयोगकर्ता उस स्रोत का नाम डाल सकता है जिसे वे स्रोत के रूप में उपयोग करना चाहते हैं, और शुरुआत में और दूर लक्ष्य रिपोर्टिंग तालिका का नाम वे जाते हैं। यदि तालिका मौजूद नहीं है तो स्क्रिप्ट इसे बनाना चाहिए। यदि तालिका पहले से मौजूद है तो स्क्रिप्ट को केवल उस दृश्य से रिकॉर्ड्स की प्रतिलिपि बनाना चाहिए जो पहले से ही तालिका में नहीं है।
स्क्रिप्ट नीचे उन सभी आवश्यकताओं को शामिल किया गया है, लेकिन मैं अगर पर्याय पीछे तालिका पहले से मौजूद है की जाँच करने के लिए एक अच्छी तरह से नहीं मिल सकता है:
CREATE SYNONYM SourceView FOR my_view
CREATE SYNONYM TargetReportingTable FOR my_table
-- Here's where I'm having trouble, how do I check if the underlying table exists?
IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_name = TargetReportingTable) = 0
BEGIN
-- Table does not exists, so insert into.
SELECT * INTO TargetReportingTable FROM SourceView
END
ELSE
BEGIN
-- Table already exists so work out the last record which was copied over
-- and insert only the newer records.
DECLARE @LastReportedRecordId INT;
SET @LastReportedRecordId = (SELECT MAX(RecordId) FROM TargetReportingTable)
INSERT INTO TargetReportingTable SELECT * FROM SourceView WHERE RecordId > @LastReportedRecordId
END
DROP SYNONYM SourceView
DROP SYNONYM TargetReportingTable
मैं जानता हूँ कि मैं सिर्फ स्क्रिप्ट के उपयोगकर्ता मिल सकता है तालिका नाम को 'info_schema' लाइन में और शीर्ष पर समानार्थी में कॉपी करने के लिए, लेकिन यह त्रुटि के लिए दायरा छोड़ देता है।
मुझे यह भी पता है कि मैं कुछ गड़बड़ कर सकता हूं जैसे तालिका का नाम एक चर में डालता है और एसक्यूएल को स्ट्रिंग के रूप में बाहर निकाल देता है, लेकिन इससे मुझे थोड़ा बीमार महसूस होता है!
क्या मेरे लिए यह देखने के लिए एक अच्छा सुरुचिपूर्ण एसक्यूएल तरीका है कि समानार्थी के पीछे की तालिका मौजूद है या नहीं? या समस्या को हल करने का एक बिल्कुल अलग तरीका है?
कृपया विशिष्ट RDBMS के साथ अपने प्रश्न को टैग, बस नहीं "एसक्यूएल" – Barmar
क्षमा करें, रूकी त्रुटि में मौजूद है आप परीक्षण कर सकते हैं। संपादन के लिए धन्यवाद। – Tom
क्या हम डेटाबेस में समानार्थी बिंदु मान सकते हैं जो समानार्थी है, या किसी अन्य डीबी को इंगित कर सकता है? –