حذف جدول در SQL Server با دستور DROP TABLE: راهنمای جامع و کاربردی
دستور DROP TABLE در SQL Server برای حذف یک جدول از پایگاه داده استفاده میشود. پس از حذف یک جدول، تمام دادهها، ایندکسها، تریگرها، محدودیتها و مشخصات دسترسی مرتبط با آن جدول نیز برای همیشه حذف میشوند. این بدان معناست که ساختار جدول نیز از بین میرود. در صورت وجود هرگونه وابستگی به جدول، این وابستگیها نیز نامعتبر خواهند شد. دستور DROP TABLE در SQL Server فقط جداول تعریفشده توسط کاربر را حذف میکند و نمیتوان از آن برای حذف جداول سیستمی استفاده کرد.
ساختار کلی دستور DROP TABLE به شکل زیر است:
DROP TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name } [ ,...n ] [ ; ]
در این ساختار، میتوانید نام جدول را با پیشوند نام پایگاه داده و/یا شمای آن مشخص کنید. عبارت ,...n
نشاندهنده امکان حذف چندین جدول به صورت همزمان است.
نسخههای SQL Server 2016 و جدیدتر، از عبارت IF EXISTS پشتیبانی میکنند که به صورت شرطی، جدول را تنها در صورتی حذف میکند که از قبل وجود داشته باشد.
ساختار استفاده از IF EXISTS به این صورت است:
DROP TABLE IF EXISTS table_name;
این عبارت از بروز خطا در صورتی که جدول مورد نظر از قبل وجود نداشته باشد، جلوگیری میکند.
برای اجرای دستور DROP TABLE در SQL Server، نیاز به مجوز ALTER بر روی شمای مربوط به جدول، یا مجوز CONTROL بر روی خود جدول، یا عضویت در نقش دیتابیس ثابت db_ddladmin دارید.
مثال ۱: حذف یک جدول با DROP TABLE
ابتدا یک جدول نمونه برای مثالهایمان ایجاد میکنیم. اسکریپت زیر یک جدول جدید به نام tblProduct در پایگاه داده فعلی ایجاد میکند.
CREATE TABLE tblProduct (
ProductId INT IDENTITY (1,1) PRIMARY KEY,
Name VARCHAR (50) NOT NULL,
ProductNumber VARCHAR (25) NOT NULL,
Color VARCHAR (15) NULL,
StandardCost MONEY NOT NULL,
ListPrice MONEY NOT NULL
);
GO
برای حذف جدول tblProduct با استفاده از دستور DROP TABLE، از دستور زیر استفاده کنید.
DROP TABLE tblProduct;
GO
این دستور جدول tblProduct را از پایگاه داده حذف میکند.
مثال ۲: حذف چندین جدول به صورت همزمان
برای حذف همزمان بیش از یک جدول، میتوانید نام جداول را با کاما از هم جدا کنید، همانطور که در زیر نشان داده شده است. برای این مثال، دو جدول جدید به نامهای tblProductCategory و tblProductModel ایجاد میکنیم.
CREATE TABLE tblProductCategory (
ProductCategoryID INT PRIMARY KEY NOT NULL,
ParentProductCategoryID INT NULL,
Name NVARCHAR (50) NOT NULL,
rowguid UNIQUEIDENTIFIER NOT NULL,
ModifiedDate DATETIME NOT NULL
);
GO
CREATE TABLE tblProductModel (
ProductModelID INT PRIMARY KEY NOT NULL,
Name NVARCHAR (50) NOT NULL,
CatalogDescription NVARCHAR (MAX) NULL,
rowguid UNIQUEIDENTIFIER NOT NULL,
ModifiedDate DATETIME NOT NULL
);
GO
حالا هر دو جدول را همزمان حذف میکنیم.
DROP TABLE tblProductCategory, tblProductModel;
GO
این دستور دو جدول tblProductCategory و tblProductModel را به صورت همزمان حذف میکند.
مثال ۳: بررسی وجود جدول قبل از حذف آن (نسخههای قدیمیتر SQL Server)
استفاده از IF EXISTS از SQL Server 2016 به بعد پشتیبانی میشود. اگر از نسخههای قدیمیتر SQL Server استفاده میکنید، میتوانید به جای آن از تابع OBJECT_ID برای بررسی وجود جدول قبل از حذف آن و جلوگیری از خطا استفاده کنید. اسکریپت زیر با استفاده از تابع OBJECT_ID، جدول tblProduct را در صورت وجود، حذف میکند.
IF OBJECT_ID('tblProduct', 'U') IS NOT NULL
DROP TABLE tblProduct;
GO
این رویکرد، در نسخههای قدیمیتر SQL Server برای حذف شرطی جدول کاربرد دارد.
مثال ۴: بررسی وجود جدول با استفاده از sys.tables
روش دیگری برای بررسی وجود یک جدول قبل از حذف آن، کوئری گرفتن از نمای کاتالوگ سیستمی sys.tables است. اسکریپت زیر وجود جدول tblProduct را بررسی کرده و سپس آن را حذف میکند.
IF EXISTS(SELECT * FROM sys.tables WHERE name = 'tblProduct' AND type = 'U')
DROP TABLE tblProduct;
GO
این روش نیز به صورت شرطی جدول را بررسی و حذف میکند.
مثال ۵: حذف یک جدول از شمای خاص
هنگامی که یک جدول ایجاد میشود، با یک اسکیما مرتبط است. به طور پیشفرض، جداول در شمای dbo ایجاد میشوند، اما میتوانید در صورت نیاز یک شمای متفاوت را مشخص کنید. ابتدا یک شمای جدید به نام Product ایجاد میکنیم و جدول tblProduct خود را در این شمای ایجاد میکنیم.
CREATE SCHEMA Product;
GO
CREATE TABLE Product.tblProduct (
ProductId INT IDENTITY (1,1) PRIMARY KEY,
Name VARCHAR (50) NOT NULL
);
GO
حالا این جدول را حذف میکنیم.
DROP TABLE Product.tblProduct;
GO
این دستور جدول tblProduct را از شمای Product حذف میکند.
مثال ۶: استفاده از دستور DROP TABLES (خطا)
دستور DROP TABLES در SQL Server پشتیبانی نمیشود و منجر به خطا خواهد شد. باید به جای آن از فرم مفرد DROP TABLE استفاده کنید.
DROP TABLES tblProduct;
GO
این دستور به دلیل استفاده از فرم جمع ‘TABLES’ منجر به خطا میشود. همواره از ‘DROP TABLE’ استفاده کنید.
مثال ۷: حذف جداول موقت
جداول موقت (یا temp tables) جداول خاصی هستند که در پایگاه داده tempdb ذخیره میشوند. دو نوع جدول موقت وجود دارد:
- جداول موقت محلی – با استفاده از یک علامت هشتگ (#) به عنوان پیشوند نام جدول ایجاد میشوند (مثلاً #temp_table).
- جداول موقت سراسری – با استفاده از دو علامت هشتگ (##) به عنوان پیشوند نام جدول ایجاد میشوند (مثلاً ##temp_table).
جداول موقت محلی فقط برای سشنی که آنها را ایجاد کرده قابل مشاهده هستند و با بسته شدن سشن، به طور خودکار حذف میشوند. جداول موقت سراسری برای تمام سشنها قابل مشاهده هستند و با بسته شدن آخرین سشن ارجاع دهنده به جدول، به طور خودکار حذف میشوند. میتوانید جداول موقت را به صراحت با استفاده از دستور DROP TABLE حذف کنید. ابتدا یک جدول موقت محلی و یک جدول موقت سراسری ایجاد میکنیم.
CREATE TABLE #LocalTempTable (
Id INT,
Name VARCHAR (50)
);
GO
CREATE TABLE ##GlobalTempTable (
Id INT,
Name VARCHAR (50)
);
GO
برای حذف این جداول موقت، دستورات زیر را اجرا کنید.
DROP TABLE #LocalTempTable;
GO
DROP TABLE ##GlobalTempTable;
GO
این دستورات، جداول موقت محلی و سراسری را حذف میکنند.