Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

तालिका पंक्तियों को एक तालिका से दूसरी तालिका में ले जाने का सबसे कारगर तरीका

एक अन्य समाधान एकाधिक स्कीमा का उपयोग करना और स्विच-ए-रू खेलना है। मैं केवल इस विधि को पसंद करता हूं क्योंकि मैं इस चाल को नौकरी में करता था, और किसी वस्तु का नाम बदलने के बारे में चेतावनी संदेश (जिसे दबाया नहीं जा सकता) मेरे इतिहास लॉग भर रहा था। मूल रूप से आपको दो अतिरिक्त स्कीमा की आवश्यकता होती है (एक अस्थायी रूप से तालिका की प्रतिलिपि रखने के लिए, और एक कैश की गई प्रतिलिपि रखने के लिए)।

CREATE SCHEMA cache AUTHORIZATION dbo;
CREATE SCHEMA hold  AUTHORIZATION dbo;

अब, कैशे स्कीमा में तालिका की नकल बनाएं:

SELECT * INTO cache.table FROM dbo.table WHERE 1 = 0;
-- then create any indexes etc.

अब जब डेटा रीफ्रेश करने का समय आता है:

-- step 1:
TRUNCATE TABLE cache.table;
-- (if you need to maintain FKs you may need to delete)
INSERT INTO cache.table SELECT ...

-- step 2:
-- this transaction will be almost instantaneous, 
-- since it is a metadata operation only: 

BEGIN TRANSACTION;
  ALTER SCHEMA hold  TRANSFER dbo.table;
  ALTER SCHEMA dbo   TRANSFER cache.table;
  ALTER SCHEMA cache TRANSFER hold.table;
COMMIT TRANSACTION;

सैद्धांतिक रूप से, आप लेन-देन के अंतिम हस्तांतरण को स्थानांतरित कर सकते हैं, क्योंकि उपयोगकर्ता कर सकते थे दूसरे स्थानांतरण के बाद dbo.table की नई प्रति को क्वेरी करना शुरू करें, लेकिन जैसा कि मैंने कहा, यह लगभग तात्कालिक है इसलिए यदि आप समरूपता में कोई अंतर देखते हैं तो मुझे आश्चर्य होगा।

आप वैकल्पिक रूप से cache.table . को छोटा भी कर सकते हैं यहां फिर से, लेकिन मैंने इसे हमेशा पॉप्युलेट किया ताकि मैं डेटा परिवर्तनों की तुलना कर सकूं या कुछ गलत होने पर समस्या निवारण कर सकूं। इस पर निर्भर करते हुए कि -- चरण 1 में कितना समय लगता है, स्थानान्तरणों को नए सिरे से फिर से भरने की तुलना में रिवर्स में स्थानान्तरण करना अधिक तेज़ हो सकता है।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर:अंकगणितीय परिचालनों में डेटा प्रकार रैंक?

  2. डेटाटेबल से एसक्यूएल टेबल में डेटा कैसे अपडेट करें?

  3. सम्मिलन आदेश में मर्ज करें

  4. वही प्रश्न - विभिन्न निष्पादन योजनाएं

  5. SQL Server 2008 में तालिका डिज़ाइन नहीं बदल सकता