Brisanje tabela, posebno onih koje imaju puno relacija ka drugim tabelama, nije lak posao. Ovo je moje rešenje za brisanje tabele @TableName zajedno sa njenim foreign key-evima:
DECLARE @sqlCommand nvarchar(MAX), @sqlString nvarchar(MAX)
DECLARE cur CURSOR LOCAL FOR
SELECT
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +
'.[' + OBJECT_NAME(parent_object_id) +
'] DROP CONSTRAINT ' + name AS sqlString
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID(@TableName)
OPEN cur
FETCH NEXT FROM cur INTO @sqlString
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC (@sqlString)
FETCH NEXT FROM cur INTO @sqlString
END
CLOSE cur
DEALLOCATE cur
SET @sqlCommand = 'DROP TABLE dbo.[' + @TableName + ']'
EXEC (@sqlCommand)
DECLARE @sqlCommand nvarchar(MAX), @sqlString nvarchar(MAX)
DECLARE cur CURSOR LOCAL FOR
SELECT
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +
'.[' + OBJECT_NAME(parent_object_id) +
'] DROP CONSTRAINT ' + name AS sqlString
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID(@TableName)
OPEN cur
FETCH NEXT FROM cur INTO @sqlString
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC (@sqlString)
FETCH NEXT FROM cur INTO @sqlString
END
CLOSE cur
DEALLOCATE cur
SET @sqlCommand = 'DROP TABLE dbo.[' + @TableName + ']'
EXEC (@sqlCommand)
Нема коментара:
Постави коментар