संयोग से, मुझे लगभग 3 घंटे पहले कुछ ऐसा ही करना था। तालिका 35 मीटर पंक्तियों की थी, यह काफी चौड़ी है, और ऐसा करने में हमेशा के लिए समय लग रहा था:
alter table myTable add myNewColumn int not null default 0;
यहां बताया गया है कि मैं किसके साथ जा रहा हूं:
alter table myTable add myNewColumn int null;
while 1=1
begin
update top (100000) myTable
set
myNewColumn = 0
where
myNewColumn is null;
if @@ROWCOUNT = 0 break;
end
alter table myTable alter column myNewColumn int not null;
alter table myTable add constraint tw_def_myNewColumn default (0) for myNewColumn;
इस बार, alter table
बयान लगभग तत्काल थे। अद्यतन बैचों को करने में लगभग 7-8 मिनट (धीमे सर्वर पर) लगे। मैं अनुमान लगा रहा हूं कि SQL सर्वर मूल्यों को पुनर्स्थापित करने के लिए मेरी मूल क्वेरी में पूर्ववत उत्पन्न कर रहा था, लेकिन मुझे इसकी शुरुआत की उम्मीद नहीं थी।
वैसे भी, आपके मामले में, शायद कुछ ऐसा ही मदद करेगा। आप एक नया बिगिंट कॉलम जोड़ने का प्रयास कर सकते हैं, बैचों में नया कॉलम अपडेट कर सकते हैं, फिर उस पर बाधाएं सेट कर सकते हैं।