Для удаления таблицы в SQL Server используется команда DROP TABLE
:
DROP TABLE [IF EXISTS] schema_name.table_name;
DROP TABLE dbo.Employees;
Лучшая практика - использовать IF EXISTS
для избежания ошибок:
DROP TABLE IF EXISTS dbo.TempData;
Если таблица связана ограничениями FOREIGN KEY с другими таблицами, нужно:
Вариант 1: Удалить зависимые ограничения вручную
-- Сначала найти и удалить FOREIGN KEY constraints
ALTER TABLE dbo.Orders DROP CONSTRAINT FK_Orders_Customers;
-- Затем удалить таблицу
DROP TABLE dbo.Customers;
Вариант 2: Использовать каскадное удаление (если ограничение было создано с ON DELETE CASCADE)
Локальные временные таблицы:
DROP TABLE #TempResults;
Глобальные временные таблицы:
DROP TABLE ##GlobalTemp;
IF OBJECT_ID('dbo.Products', 'U') IS NOT NULL
PRINT 'Таблица существует';
SELECT
fk.name AS ForeignKey,
OBJECT_NAME(fk.parent_object_id) AS ChildTable
FROM
sys.foreign_keys fk
WHERE
OBJECT_NAME(fk.referenced_object_id) = 'Products';
BEGIN TRY
BEGIN TRANSACTION;
-- Удалить зависимости
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql = @sql +
'ALTER TABLE ' + OBJECT_NAME(fk.parent_object_id) +
' DROP CONSTRAINT ' + fk.name + ';'
FROM
sys.foreign_keys fk
WHERE
OBJECT_NAME(fk.referenced_object_id) = 'Products';
EXEC sp_executesql @sql;
-- Удалить таблицу
DROP TABLE dbo.Products;
COMMIT TRANSACTION;
PRINT 'Таблица успешно удалена';
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT 'Ошибка при удалении таблицы: ' + ERROR_MESSAGE();
END CATCH
Поддержка IF EXISTS
:
DROP TABLE IF EXISTS dbo.OldData;
Проверка через условную логику:
IF OBJECT_ID('dbo.OldData', 'U') IS NOT NULL
DROP TABLE dbo.OldData;
Для таблиц в нестандартных схемах:
DROP TABLE sales.Orders;
Удаление всех таблиц в схеме (использовать с крайней осторожностью):
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql = @sql + 'DROP TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';'
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE s.name = 'dbo';
EXEC sp_executesql @sql;
Основные моменты удаления таблиц в SQL Server:
DROP TABLE
для удаленияIF EXISTS
или OBJECT_ID
)Безопасный паттерн удаления:
BEGIN TRANSACTION;
DROP TABLE IF EXISTS dbo.TableToDelete;
COMMIT TRANSACTION;
Помните, что удаление таблицы - необратимая операция, которая удаляет все данные и структуру таблицы без возможности восстановления (если нет бэкапа).