Database
 sql >> डेटाबेस >  >> RDS >> Database

एसक्यूएल ड्रॉप टेबल स्टेटमेंट और विभिन्न उपयोग के मामले

SQL DROP TABLE स्टेटमेंट डेटाबेस से टेबल को ड्रॉप करने का काम करता है। यह टेबल और उससे जुड़े डेटा और इंडेक्स को हटा देता है। कथन अपरिवर्तनीय है। इस प्रकार, आप केवल बैकअप को पुनर्स्थापित करके तालिका को पुनर्स्थापित कर सकते हैं।

इस लेख में निम्नलिखित मामले शामिल हैं:

  1. एक या एक से अधिक टेबल हटाएं।
  2. दृश्य में उपयोग की गई तालिका हटाएं।
  3. विदेशी कुंजी वाली तालिका हटाएं।
  4. क्लस्टर और नॉन-क्लस्टर इंडेक्स वाली टेबल को डिलीट करें।
  5. प्रतिकृति सेटअप से तालिका हटाएं।

DROP TABLE स्टेटमेंट का सिंटैक्स निम्नलिखित है:

IF EXISTS DROP TABLE [DatabaseName].[SchemaName].[TableName]

नोट:यदि आप SQL सर्वर 2016 और इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप यदि मौजूद हैं . निर्दिष्ट कर सकते हैं ड्रॉप टेबल . से पहले बयान।

साथ ही, आप तालिका का नाम DROP TABLE कथन के बाद निर्दिष्ट करते हैं। तालिका नाम प्रारूप [डेटाबेस नाम] होना चाहिए। [स्कीमा नाम]। [तालिका का नाम]।

ड्रॉप टेबल स्टेटमेंट का एक सरल उदाहरण

प्रदर्शन के लिए, मैंने AdventureWorks2017 . को बहाल कर दिया है मेरे कार्य केंद्र पर डेटाबेस। यहाँ, मैं कर्मचारियों को हटाने जा रहा हूँ टेबल।

तालिका को छोड़ने के लिए प्रयुक्त निम्न क्वेरी का उपयोग करें:

DROP TABLE [AdventureWorks2017].[dbo].[employees]

मैंने SQL सर्वर प्रबंधन स्टूडियो में Devart dbForge SQL पूर्ण उपकरण स्थापित किए हैं। जब मैं SQL DROP TABLE स्टेटमेंट निष्पादित करता हूं, तो यह एक पुष्टिकरण डायलॉग बॉक्स का संकेत देता है, जैसा कि नीचे दिखाया गया है:

वैसे भी निष्पादित करें . पर क्लिक करें . तालिका गिरा दी गई है।

सत्यापित करने के लिए, निम्न क्वेरी चलाएँ:

SELECT * FROM dbo. employee

यदि यह तालिका को सफलतापूर्वक गिरा देता है, तो आपको निम्न त्रुटि प्राप्त होगी:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'dbo.employee'.

दृश्य में उपयोग की गई तालिका छोड़ें

यहां, हम डेटाबेस दृश्य में उपयोग की गई तालिका को छोड़ने का प्रयास करेंगे। vPerson . नाम का दृश्य बनाने के लिए निम्न स्क्रिप्ट निष्पादित करें :

CREATE VIEW vPerson 
AS
SELECT * FROM Person p

ड्रॉप टेबलचलाएं व्यक्ति . को हटाने का आदेश तालिका:

DROP TABLE [AdventureWorks2017].[dbo].[person]

एक बार टेबल छोड़ने के बाद, vPerson से डेटा पॉप्युलेट करने के लिए SELECT क्वेरी चलाएँ . यह एक त्रुटि उत्पन्न करेगा:

Msg 208, Level 16, State 1, Procedure vPerson, Line 3 [Batch Start Line 0]
Invalid object name 'Person'.
Msg 4413, Level 16, State 1, Line 1
Could not use the view or function 'vPerson' because of binding errors.

यह त्रुटि तब होती है जब वह वस्तु जिस पर दृश्य निर्भर है गिरा दिया जाता है।

विदेशी कुंजी वाली तालिका छोड़ें

यदि आपने किसी टेबल पर एक विदेशी कुंजी बनाई है, तो आप चाइल्ड टेबल को छोड़ने से पहले पैरेंट टेबल को नहीं छोड़ सकते। इसका मतलब है कि आपको पहले चाइल्ड टेबल या चाइल्ड टेबल को संदर्भित करने वाली विदेशी कुंजी को छोड़ना होगा।

tblstudent . नाम की दो टेबल हैं और tblस्कूल - ईआर आरेख निम्नलिखित है:

नोट :मैं उपयोग कर रहा हूँ SQL Server 2019 के लिए dbForge Studio डेटाबेस आरेख बनाने के लिए - यह तालिका संरचना में उसके सभी तत्वों और तालिकाओं के बीच इकाई-संबंध में उचित अंतर्दृष्टि देता है।

निम्न क्वेरी tblstudent . नाम की टेबल बनाती है और tblस्कूल और उनकी प्राथमिक कुंजियाँ और विदेशी कुंजियाँ:

CREATE TABLE tblSchool
(
	SchoolID INT identity(1,1),
	SchoolName VARCHAR(500),
	City varchar(250),
	CONSTRAINT PK_SchoolID PRIMARY KEY  (SchoolID)  
)
GO
CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) ,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT,
CONSTRAINT PK_StudentID PRIMARY KEY  (StudentID),
Constraint FK_SchoolID FOREIGN KEY (SchoolID) REFERENCES tblSchool (SchoolID)
)
GO

tblstudent . को छोड़ने के लिए निम्न क्वेरी चलाएँ तालिका:

Drop table [tblSchool]

क्वेरी निम्न त्रुटि लौटाती है:

Msg 3726, Level 16, State 1, Line 22
Could not drop object 'tblSchool' because it is referenced by a FOREIGN KEY constraint.

हमारे डेमो में, यदि आप tblschool . को छोड़ना चाहते हैं तालिका, आपको tblstudent . को छोड़ना होगा पहले टेबल। tblStudent . को छोड़ने के लिए क्वेरी पर एक नज़र डालें और tblschool तालिका:

Drop table [tblSchool]
Go
Drop table [tblStudent]
Go

बैच टेबल को सिंगल ड्रॉप टेबल स्टेटमेंट में छोड़ना भी संभव है। क्वेरी को इस प्रकार चलाएँ:

Drop table [tblSchool], [tblStudent]

अनुक्रमणिका वाली तालिका छोड़ें

आइए DROP TABLE स्टेटमेंट व्यवहार के एक अन्य परिदृश्य को देखें। मान लें कि हमने tblstudent नाम की एक तालिका बनाई है। इसमें एक संकुलित और एक गैर-संकुल सूचकांक है।

जब हम DROP TABLE का उपयोग करके एक टेबल छोड़ते हैं, तो क्या यह इंडेक्स को हटा देता है? आइए इसकी जांच करें। मैंने tblStudent . नाम की एक टेबल बनाई है जिसमें एक क्लस्टर्ड और एक गैर-क्लस्टर इंडेक्स है। क्वेरी निम्नलिखित है:

CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT
)
GO
CREATE NONCLUSTERED INDEX IDX_tblStudent_StudentName ON tblStudent(StudentName) 
GO

हम sys.indexes . को क्वेरी करके इंडेक्स की सूची देख सकते हैं डीएमवी।

एक बार टेबल छोड़ने के बाद, निम्न क्वेरी चलाएँ:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

आउटपुट:

जैसा कि आप देख सकते हैं, हमने tblStudent के लिए क्लस्टर्ड और गैर-क्लस्टर इंडेक्स दोनों बनाए हैं टेबल।

अब, तालिका को हटाने के लिए निम्न आदेश चलाएँ:

Drop table tblStudent

फिर से, वही क्वेरी चलाएँ जिसका उपयोग हम इंडेक्स की सूची को पॉप्युलेट करने के लिए करते थे:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

आउटपुट:

उपरोक्त स्क्रीनशॉट दिखाता है कि क्वेरी ने एक खाली परिणाम सेट लौटाया है। इस प्रकार, जब हम किसी तालिका को छोड़ते हैं, तो वह उस तालिका से संबद्ध अनुक्रमणिकाओं को भी गिरा देती है।

प्रतिकृति से तालिका छोड़ें

मान लीजिए कि आप उस तालिका को छोड़ना चाहते हैं जो प्रतिकृति का हिस्सा है। इस मामले में, आपको अतिरिक्त कदम उठाने होंगे।

मैंने SQL01 और SQL02 नामक SQL सर्वर 2019 के दो उदाहरणों के बीच प्रतिकृति को कॉन्फ़िगर किया है। इसके बाद, मैंने tblStudent . को दोहराया है और tblस्कूल टेबल.

हम निम्न क्वेरी निष्पादित करके tblSchool तालिका को SQL01 से हटा देते हैं:

use codingsight
go
drop table tblSchool

आउटपुट:

Msg 3724, Level 16, State 3, Line 3
Cannot drop the table 'tblSchool' because it is being used for replication.

उपरोक्त त्रुटि व्याख्यात्मक है। तालिका को छोड़ने के लिए, हमें पहले इसे प्रतिकृति से हटाना होगा:

  1. SQL सर्वर प्रबंधन स्टूडियो खोलें और SQL01 से कनेक्ट करें।
  2. विस्तृत करें प्रतिकृति -> विस्तृत करें स्थानीय प्रकाशन
  3. प्रकाशन पर राइट-क्लिक करें और गुण . चुनें ।

प्रकाशन गुण . में विंडो में, लेख पर क्लिक करें

वहां, आप तालिकाओं की सूची देख सकते हैं। tblSchool को अनचेक करें तालिका और क्लिक करें ठीक

नोट: जब आप आलेख को प्रतिकृति से छोड़ते हैं, तो पिछले स्नैपशॉट अमान्य हो जाते हैं। लेख छोड़ने के बाद आपको एक नया स्नैपशॉट बनाना होगा।

एक बार तालिका को प्रतिकृति से हटा दिए जाने के बाद, DROP TABLE . निष्पादित करें SQL01 पर कमांड करें :

use codingsight
go
drop table tblSchool

आउटपुट:

जैसा कि आप देख सकते हैं, तालिका गिरा दी गई है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL डेटा डिस्कवरी और वर्गीकरण

  2. समस्या डिजाइन के प्रमुख संकेतक

  3. हमारा नया SQLPerformance.com न्यूज़लेटर

  4. डेटाबेस और डेटा फ़ाइलों को माइग्रेट कैसे करें

  5. निकटतम मैच, भाग 2