आप क्या पंक्तियों को हटाना और ऐसा नहीं करने की आवश्यकता को प्रतिबंधित करने के लिए की जरूरत है
DECLARE @RowsDeleted INTEGER
SET @RowsDeleted = 1
WHILE (@RowsDeleted > 0)
BEGIN
-- delete 10,000 rows a time
DELETE TOP (10000) FROM MyTable [WHERE .....] -- WHERE is optional
SET @RowsDeleted = @@ROWCOUNT
END
आम तौर पर, TRUNCATE: एक पूरी हटाने, या आप कम तालिका उपयोग नहीं कर सकते (जैसे तालिका एक FK बाधा द्वारा संदर्भित, या एक अनुक्रमित दृश्य में शामिल), तो आप मात्रा में हटाने के लिए कर सकते हैं सबसे अच्छा तरीका है और यदि संभव हो तो मैं इसका उपयोग करूंगा। लेकिन यह सभी परिदृश्यों में इस्तेमाल नहीं किया जा सकता है। साथ ही, ध्यान दें कि यदि कोई है तो TRUNCATE तालिका के लिए पहचान मान रीसेट करेगा।
यदि आप SQL 2000 या इससे पहले का उपयोग कर रहे हैं, तो शीर्ष स्थिति उपलब्ध नहीं है, इसलिए आप इसके बजाय SET ROWCOUNT का उपयोग कर सकते हैं।
DECLARE @RowsDeleted INTEGER
SET @RowsDeleted = 1
SET ROWCOUNT 10000 -- delete 10,000 rows a time
WHILE (@RowsDeleted > 0)
BEGIN
DELETE FROM MyTable [WHERE .....] -- WHERE is optional
SET @RowsDeleted = @@ROWCOUNT
END
यदि आप अभी भी लेनदेन के दायरे में हैं, तो आप एक ट्रंकेट रोलबैक कर सकते हैं, लोकप्रिय धारणा के विपरीत यह लेनदेनकृत है - अस्वीकृत आईएएम है प्रतिबद्ध होने तक हटाया नहीं गया है, इसलिए इसे आईएएम को बहाल करके वापस घुमाया जा सकता है। – Andrew
बस इसे पढ़ें, और आप सही हैं, एसक्यूएल सर्वर में आप एक छंटनी रोलबैक कर सकते हैं। मेरे मन में ओरेकल था जहां यह संभव नहीं है (दस्तावेज़ीकरण के अनुसार)। –
मैं TRUNCATE का उपयोग नहीं कर सकता क्योंकि मायटेबल में विदेशी कुंजी भी है, मुझे फिल्टर डेटा के लिए WHERE क्लॉज की आवश्यकता है –