powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отключить проверку внешних ключей при создании базы?
18 сообщений из 18, страница 1 из 1
Как отключить проверку внешних ключей при создании базы?
    #39907973
VinniL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Просьба дать совет.
Как отключить проверку внешних ключей на всю базу?

Есть скрипт создании базы с 30 таблицами с огромной кучей внешних ключей.
При создании первой таблицы ключ ссылается на еще не созданную, и выдает ошибку, и так 30 раз. Хочу отключить эту проверку, чтобы создать все таблицы. А потом включить снова.


Заранее благодарю!
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907983
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VinniL,

Сгенерировать скрипт и выполнить (все делать на нужной базе)

генерация скрипта на выключение

Код: sql
1.
2.
3.
4.
SELECT 
       'ALTER TABLE '+QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id))+' NOCHECK CONSTRAINT '+QUOTENAME([name])
FROM 
     sys.foreign_keys;



генерация скрипта на включение

Код: sql
1.
2.
3.
4.
SELECT 
       'ALTER TABLE '+QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id))+' CHECK CONSTRAINT '+QUOTENAME([name])
FROM 
     sys.foreign_keys;
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907984
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда взялся этот скрипт?

Как бы он должен быть написан в правильной последовательности.

Либо вам надо поставить таблицы в правильном порядке. Либо надо сначала создать все таблицы, а потом только создавать внешние ключи.

К тому же может быть ситуация, когда есть ссылка A -> B -> C -> A . Тогда вам надо выкрутиться
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907985
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VinniL,

Что-то вроде этого:
Код: sql
1.
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"



Если чисто для fk - получаете их перечисление через служебные представления, а потом в курсоре в динамике их отключаете
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907987
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

Только нужно еще их сделать is_true
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907989
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
VinniL,

Что-то вроде этого:
Код: sql
1.
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"



Если чисто для fk - получаете их перечисление через служебные представления, а потом в курсоре в динамике их отключаете


В данном случае отключит все ограничения не только FK
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39907992
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
entrypoint,

Только нужно еще их сделать is_true


что это ? имеете ввиду is_not_trusted ? Для этого FK нужно пересоздать
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908361
VinniL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за ответы.

Пошел долгим путем, вынести в начале скрипты создания всех таблиц, далее скрипт создания вторичных ключей.
Пусть долгий, но зато наверняка.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908421
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VinniL,

в SSIS пакете можно отключить проверку целостности при выполнении задач потока данных. Создайте SSIS решение, для 30 таблиц максимум час работы на создание, можно и за 20 минут справиться. К тому же балк вставка.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908426
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
VinniL,

в SSIS пакете можно отключить проверку целостности при выполнении задач потока данных. Создайте SSIS решение, для 30 таблиц максимум час работы на создание, можно и за 20 минут справиться. К тому же балк вставка.
Судя по описанию, у ТС бругая проблема: при создании первой же таблицы в скрипте создаются ФК на другие таблицы, которых ещё нет. Потом то же самое со второй таблицей, и т.д.

VinniL,
Единственно возможное решение - сделать правильные скрипты, которые сначала создают таблицы, потом ФК.
Или поправить существующий скрипт (таблиц всего 30, работы на 10 минут).
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908429
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

SSIS как раз и решает эту проблему - особенно помогает при "замыкании" FK на ту же таблицу. Т.е. автоматизирует отключение и включение FK при загрузке данных. Я раньше не знал об этой галке и скриптами отключал.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908433
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
alexeyvg,

SSIS как раз и решает эту проблему - особенно помогает при "замыкании" FK на ту же таблицу. Т.е. автоматизирует отключение и включение FK при загрузке данных. Я раньше не знал об этой галке и скриптами отключал.
А, интересно, не знал.
То есть SSMS будет анализировать скрипт, и не выполнять в нём ALTER TABLE (или соотв указания в CREATE TABLE)?
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908435
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Единственно возможное решение - сделать правильные скрипты, которые сначала создают таблицы, потом ФК.
Или поправить существующий скрипт (таблиц всего 30, работы на 10 минут).
Ещё вариант - выполнять скрипт, пока всё не создастся :-)
Ведь, если там ошибки, соответствующий батч просто не выполнится. И так, постепенно, все таблицы и констрейны создадутся.
Единственно, если в скрипте есть какие то действия с данными, результат может быть некорректный.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908448
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору темы с моим почтением.
https://srulbond1.blogspot.com/
Здесь блог про некую программку,
в меру корявую, ибо делалась для себя, а не на продажу.
А кто хочет взять, так только на правах дарённого коня.
У ней есть опция генерации скрипта внешних ключей.
И опция скрипта на их полное уничтожение.

Излишне говорить, что оба скрипта надо сперва сохранить.
Наше дело предложить, ваше дело отказаться.
У моих юзеров лица вытягиваются, когда я им рассказываю,
если рассказываю, как обошёл их внешние ключи.
Лучше не рассказывать.

Да. чтоб вы знали, сама программа только строит скрипты и ничего
не стирает.
Стираете вы собственноручно из Ентерпрайса.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908465
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это те же звери со скриптом на построение.
Строить не ломать-прога может зависнуть до 3-х минут,
ноу паник.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908477
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
alexeyvg
Единственно возможное решение - сделать правильные скрипты, которые сначала создают таблицы, потом ФК.
Или поправить существующий скрипт (таблиц всего 30, работы на 10 минут).
Ещё вариант - выполнять скрипт, пока всё не создастся :-)
Ведь, если там ошибки, соответствующий батч просто не выполнится. И так, постепенно, все таблицы и констрейны создадутся.
Единственно, если в скрипте есть какие то действия с данными, результат может быть некорректный.


Это не прокатит, если reference идут inline

CREATE TABLE dbo.PurchaseOrderDetail
(
PurchaseOrderID int NOT NULL
REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
LineNumber smallint NOT NULL,
ProductID int NULL
REFERENCES Production.Product(ProductID),
UnitPrice money NULL,
OrderQty smallint NULL,
ReceivedQty float NULL,
RejectedQty float NULL,
DueDate datetime NULL,
rowguid uniqueidentifier ROWGUIDCOL NOT NULL
CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (NEWID()),
ModifiedDate datetime NOT NULL
CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (GETDATE()),
LineTotal AS ((UnitPrice*OrderQty)),
StockedQty AS ((ReceivedQty-RejectedQty)),
CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
WITH (IGNORE_DUP_KEY = OFF)
)
ON PRIMARY;
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908548
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Владислав Колосов
alexeyvg,

SSIS как раз и решает эту проблему - особенно помогает при "замыкании" FK на ту же таблицу. Т.е. автоматизирует отключение и включение FK при загрузке данных. Я раньше не знал об этой галке и скриптами отключал.
А, интересно, не знал.
То есть SSMS будет анализировать скрипт, и не выполнять в нём ALTER TABLE (или соотв указания в CREATE TABLE)?


Как внутри работает, я не подсматривал, настраивается чеком "проверять ограничения" в назначении потока.
...
Рейтинг: 0 / 0
Как отключить проверку внешних ключей при создании базы?
    #39908907
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
alexeyvg
пропущено...
А, интересно, не знал.
То есть SSMS будет анализировать скрипт, и не выполнять в нём ALTER TABLE (или соотв указания в CREATE TABLE)?


Как внутри работает, я не подсматривал, настраивается чеком "проверять ограничения" в назначении потока.


Это опция включает или не включает настройки BCP механизма. Никаких altet table тут не делается.

Если вы посмотрите SqlBulkCopy под C#, то там тоже есть эти настройки. Остальное происходит в ядре субд.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отключить проверку внешних ключей при создании базы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]