В оракуле, чтобы удалить все таблицы и ограничения, вы должны ввести что-то вроде
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
и это полностью удалит таблицы и их зависимости. Что эквивалентно SQL-серверу?
В оракуле, чтобы удалить все таблицы и ограничения, вы должны ввести что-то вроде
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
и это полностью удалит таблицы и их зависимости. Что эквивалентно SQL-серверу?
Я не верю, что SQL имеет столь же элегантное решение. Перед тем, как вы отпустите таблицу, вы должны удалить все связанные ограничения.
К счастью, все это хранится в информационной схеме, и вы можете получить доступ к этому, чтобы получить список ударов.
Это сообщение в блоге должно быть в состоянии получить то, что вам нужно: http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx
-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)
set @database = 'DatabaseName'
set @table = 'TableName'
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
exec sp_executesql @sql
END
В SQL Server Management Studio перейдите в раздел "Обозреватель/сценарии объектов/сценариев SQL Server" и включите "Генерировать script для зависимых объектов". Затем щелкните правой кнопкой мыши таблицу, script > drop > на новое окно запроса и оно сгенерирует ее для вас.
Это может быть ужасное решение, но я нахожу его быстрым. Это похоже на ответ Винни, но продукт оператора SQL представляет собой еще одну серию операторов SQL, которая удалит все ограничения и таблицы.
(
select
'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
INFORMATION_SCHEMA.TABLES t
,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
t.table_name = tc.table_name
and tc.constraint_name not like '%_pk'
and tc.constraint_name not like 'pk_%'
and t.table_catalog='<schema>'
) UNION (
select
'DROP TABLE ' + t.table_name + ';'
from
INFORMATION_SCHEMA.TABLES t
where
t.table_catalog='<schema>'
)
В конечном счете мы удаляем нашу таблицу. Поэтому мы можем просто запустить следующую команду:
ALTER TABLE... DROP CONSTRAINT...
ТАБЛИЦА DROP...
1 > ALTER TABLE PRJ_DETAILS DROP CONSTRAINT FK_PRJ_TYPE;
- Имя таблицы и Constraint Name - это параметр
2 > ТАБЛИЦА ДРОБ.
Ограничение первой кавычки с именем, связанным с ней Во-вторых, вы можете отказаться от таблицы.
Это сработало для меня и его легко.
Это все забава и игры, пока какая-либо таблица не ссылается на вашу таблицу...
Затем я должен изменить код, указанный так:
CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
as
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
(rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
(tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
where tc.constraint_catalog = @database
and tc_pk.TABLE_NAME = @table
exec sp_executesql @sql
END
go
Мне просто нужно удалить внешний ключ
DECLARE @database nvarchar(50)
DECLARE @TABLE_NAME nvarchar(250)
DECLARE @CONSTRAINT_NAME nvarchar(250)
DECLARE @sql nvarchar(350)
set @database = 'XXX'
DECLARE db_cursor CURSOR FOR
select TABLE_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and CONSTRAINT_TYPE='FOREIGN KEY'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
select @sql = 'ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @TABLE_NAME
exec sp_executesql @sql
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
END
CLOSE db_cursor
DEALLOCATE db_cursor