2016-08-02 10 views
6

को छोड़कर SQL सर्वर डेटाबेस में सभी तालिकाओं को हटाएं मेरे पास अब मेरे डेटाबेस में लगभग 50+ तालिका है जो मैं चाहता हूं कि कुछ को छोड़कर डेटाबेस में सभी तालिकाओं को छोड़ दें।कुछ

अब मैं क्या पता sys.tables है एक मेज है कि सभी तालिकाओं इसलिए शुरू में सूची मैं सोच रहा है कि यह काम हो सकता है इस

delete from sys.tables where name like '%DynamicSurgery' (or any other condition) 

की तरह एक प्रश्न भाग गया है। लेकिन जैसा कि मैंने उम्मीद की थी कि यह

सिस्टम कैटलॉग के लिए इस अद्यतन की अनुमति नहीं है।

कृपया मुझे बताएं कि SQL सर्वर में गुणों को हटाने का कोई तरीका है या नहीं?

+1

परीक्षण और विकास साइट? डेटाबेस को फिर से बनाने के लिए एक स्क्रिप्ट है। आवश्यकता होने पर पूरा शुरू करो। – jarlh

+1

आप sys.tables के माध्यम से पुनरावृत्त करने के लिए एक कर्सर लिख सकते हैं, जहां आप 'ड्रॉप टेबल' कथन बनाते हैं और उन्हें निष्पादित करते हैं। – HoneyBadger

उत्तर

10

आप आवश्यक तालिकाओं DROP को गतिशील क्वेरी का उपयोग कर सकते हैं:

DECLARE @ExecSQL AS NVARCHAR (MAX) = ''; 

SELECT @ExecSQL = @ExecSQL + 
    'DROP TABLE ' + QUOTENAME(S.name) + '.' + QUOTENAME(T.name) + '; ' 
FROM sys.tables T 
JOIN sys.schemas S ON S.schema_id = T.schema_id 
WHERE T.name LIKE '%DynamicSurgery' 

--PRINT @ExecSQL 
EXEC (@ExecSQL) 
+6

आपको * वैरिएबल को 'NVARCHAR' के रूप में घोषित करना होगा क्योंकि तालिका नामों में यूनिकोड वर्ण हो सकते हैं। आपको * 'execSQL' लंबाई '(MAX)' बनाना चाहिए क्योंकि आप तालिकाओं की संख्या (इसलिए SQL की लंबाई) नहीं जानते हैं। और आपको * 2 भाग नाम 'QUOTENAME (स्कीमा) + 'का उपयोग करना चाहिए। + QUOTENAME (नाम) 'क्योंकि तालिकाएं विभिन्न स्कीमा से संबंधित हो सकती हैं। और आपको * संदर्भ सिस्टम टेबल और कॉलम को सही नामों से संदर्भित करना होगा, ** केस ** सहित, आपका उदाहरण केस संवेदनशील संयोजन डीबी पर असफल हो जाएगा। –

+1

@RemusRusanu: अधिसूचना के लिए धन्यवाद। कहा अंक सही हैं। – Arulkumar

+0

धन्यवाद कि मेरी समस्या हल की गई –

-3
  1. पर यह
  2. प्रेस हटाएँ बटन पर क्लिक करके तालिका का चयन करें और एंटर दबाएं। ध्यान दें: यदि कोई निर्भरता (विदेशी कुंजी) है, तो तालिका हटाई नहीं जाएगी