Отбрасывание группы таблиц в SQL Server

== может использоваться во многих типах объектов, но вы можете использовать Object.equals для любого типа, особенно для строк и маркеров карты Google.

7
задан Mark Harrison 18 August 2008 в 16:15
поделиться

7 ответов

Рискуя тем, чтобы звучать глупым, я не верю поддержке SQL Server удаление / каскадный синтаксис. Я думаю, что можно настроить удалить правило сделать, расположение каскадом удаляет (http://msdn.microsoft.com/en-us/library/ms152507.aspx), но насколько я знаю, что прием с SQL Server только для выполнения запроса отбрасывания однажды для каждой таблицы, которую Вы отбрасываете, затем проверяете, что это работало.

4
ответ дан 7 December 2019 в 10:11
поделиться

Другой подход мог быть: сначала избавьтесь от ограничений, затем отбросьте таблицы в единственном выстреле.

Другими словами, ОГРАНИЧЕНИЕ ОТБРАСЫВАНИЯ для каждого ограничения, затем DROP TABLE для каждой таблицы; в этой точке порядок выполнения не должен быть проблемой.

1
ответ дан 7 December 2019 в 10:11
поделиться

Это требует, чтобы SP ___ отбросил ___ ограничительный сценарий, который можно найти в Журнале Базы данных:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?"
GO
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?"
GO

ОТМЕТЬТЕ это - очевидно - если Вы означали отбросить ВСЕ таблицы в Вашей базе данных, так быть осторожными

1
ответ дан 7 December 2019 в 10:11
поделиться

У меня нет доступа к SQL Server для тестирования этого, но как насчет:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;
0
ответ дан 7 December 2019 в 10:11
поделиться

Я не уверен, если подход Derek работает. Вы не имеете, отмечают его как лучший ответ все же.

Если нет: с SQL Server 2005 это должно быть возможно, я предполагаю.
Там они представили исключения (который я еще не использовал). Так отбросьте таблицу, поймайте исключение, если Вы происходите, и попробуйте следующую таблицу, пока их все не уводят.
Можно сохранить список таблиц в поддающемся соблазну и использовать курсор для пересечения его, если Вы хотите.

0
ответ дан 7 December 2019 в 10:11
поделиться

Вещью, сдерживающей Вас от отбрасывания таблиц в любом порядке, являются зависимости от внешнего ключа между таблицами. Поэтому избавьтесь от FK перед запуском.

  1. Используя системные представления INFORMATION_SCHEMA, получите список всех внешних ключей, связанных с любой из этих таблиц
  2. Отбросьте каждый из этих внешних ключей
  3. Теперь необходимо смочь отбросить все таблицы, с помощью любого порядка, который Вы хотите.
0
ответ дан 7 December 2019 в 10:11
поделиться

Я закончил тем, что использовал ddlutils Apache для выполнения отбрасывания для меня, который уладил его в моем случае, хотя решение, которое работало только в SQL-сервере, будет вполне немного более простым.

Парк @Derek, я не знал, что Вы могли запятая разделять таблицы там, таким образом, это удобно, но это, кажется, не работает вполне как ожидалось. Нижний, ЕСЛИ СУЩЕСТВУЕТ, ни КАСКАД распознан SQL-сервером, которым это кажется, и выполнение drop table X, Y, Z кажется, работает, только если они должны быть отброшены в установленном порядке.

См. также http://msdn.microsoft.com/en-us/library/ms173790.aspx, который описывает синтаксис таблицы отбрасывания.

0
ответ дан 7 December 2019 в 10:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: