मैं अपने काम के लिए भी इस समस्या में भाग गया। और मेरा समाधान #2 के साथ है।
यहाँ मेरे कदम हैं (मैं SQL सर्वर 2005 का उपयोग कर रहा हूँ):
1) तालिका में कॉलम को डिफ़ॉल्ट मान के साथ जोड़ें:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) एक NOT NULL
जोड़ें NOCHECK
. के साथ बाधा विकल्प। NOCHECK
मौजूदा मूल्यों पर लागू नहीं होता:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) तालिका में बढ़ते हुए मानों को अपडेट करें:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
अपडेट स्टेटमेंट केवल अधिकतम 3000 रिकॉर्ड अपडेट करेगा। यह उस समय डेटा का एक हिस्सा बचाने की अनुमति देता है। मुझे "MyColumn IS NULL" का उपयोग करना है क्योंकि मेरी तालिका में अनुक्रम प्राथमिक कुंजी नहीं है।
-
GO 1000
पिछले कथन को 1000 बार निष्पादित करेगा। यह 3 मिलियन रिकॉर्ड अपडेट करेगा, अगर आपको और चाहिए तो बस इस संख्या को बढ़ाएं। यह तब तक निष्पादित होता रहेगा जब तक SQL सर्वर अद्यतन विवरण के लिए 0 रिकॉर्ड नहीं लौटाता।