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

SQL सर्वर में एक विशाल तालिका डेटा को किसी अन्य तालिका में कैसे कॉपी करें

मुझे एक ही समस्या थी, सिवाय इसके कि मेरे पास 2 अरब पंक्तियों वाली एक तालिका है, इसलिए अगर मैंने ऐसा किया तो लॉग फ़ाइल का कोई अंत नहीं होगा, यहां तक ​​​​कि थोक-लॉगिंग पर सेट पुनर्प्राप्ति मॉडल के साथ भी:

insert into newtable select * from oldtable

इसलिए मैं डेटा के ब्लॉक पर काम करता हूं। इस तरह, यदि स्थानांतरण बाधित होता है, तो आप इसे पुनः आरंभ करें। साथ ही, आपको तालिका जितनी बड़ी लॉग फ़ाइल की आवश्यकता नहीं है। आपको कम tempdb I/O भी लगता है, पता नहीं क्यों।

set identity_insert newtable on
DECLARE @StartID bigint, @LastID bigint, @EndID bigint
select @StartID = isNull(max(id),0) + 1
from newtable

select @LastID = max(ID)
from oldtable

while @StartID < @LastID
begin
    set @EndID = @StartID + 1000000

    insert into newtable (FIELDS,GO,HERE)
    select FIELDS,GO,HERE from oldtable (NOLOCK)
    where id BETWEEN @StartID AND @EndId

    set @StartID = @EndID + 1
end
set identity_insert newtable off
go

आपको आईडी से निपटने के तरीके को बदलने की आवश्यकता हो सकती है, यह सबसे अच्छा काम करता है यदि आपकी तालिका आईडी द्वारा क्लस्टर की जाती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में DROP टेबल स्टेटमेंट को समझना

  2. SQL सर्वर प्रबंधन स्टूडियो और Transact SQL में GO का क्या उपयोग है?

  3. अंकगणित अतिप्रवाह त्रुटि अभिव्यक्ति को डेटा प्रकार डेटाटाइम में परिवर्तित करना। (दिनांक समय प्रदर्शित करते समय ..)

  4. SQL सर्वर डेटाबेस में मौजूदा तालिका में कॉलम जोड़ें

  5. SQL सर्वर 2008 खाली स्ट्रिंग बनाम स्पेस