टेबल से डेटा हटाने से निपटने के दौरान, जिसमें विदेशी कुंजी संबंध होते हैं - जो मूल रूप से किसी भी उचित रूप से डिज़ाइन किए गए डेटाबेस के मामले में होता है - हम सभी बाधाओं को अक्षम कर सकते हैं, सभी डेटा हटा सकते हैं और फिर बाधाओं को फिर से सक्षम कर सकते हैं
-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"
-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
बाधाओं और ट्रिगर को अक्षम करने के बारे में अधिक जानकारी यहां
अगर कुछ तालिकाओं में पहचान कॉलम हैं तो हम उन्हें फिर से देखना चाहेंगे
EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"
ध्यान दें कि RESEED का व्यवहार एकदम नई तालिका, और एक जिसमें BOL से पहले कुछ डेटा डाला गया था, के बीच भिन्न होता है:
<ब्लॉकक्वॉट>DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)
वर्तमान पहचान मान newReseedValue पर सेट है। यदि तालिका बनाने के बाद से कोई पंक्तियाँ सम्मिलित नहीं की गई हैं, तो DBCC CHECKIDENT को क्रियान्वित करने के बाद सम्मिलित पहली पंक्ति पहचान के रूप में newReseedValue का उपयोग करेगी। अन्यथा, डाली गई अगली पंक्ति newReseedValue + 1 का उपयोग करेगी। यदि newReseedValue का मान पहचान कॉलम में अधिकतम मान से कम है, त्रुटि संदेश 2627 तालिका के बाद के संदर्भों पर उत्पन्न होगा।
रॉबर्ट को इस तथ्य को इंगित करने के लिए धन्यवाद कि बाधाओं को अक्षम करने से ट्रंकेट का उपयोग करने की अनुमति नहीं मिलती है, बाधाओं को छोड़ना होगा, और फिर फिर से बनाना होगा