[personal profile] zinal
При пакетном переносе данных между базами Microsoft SQL Server и в ряде других сценариев (например, при загрузке замаскированной/обезличенной информации в создаваемую тестовую базу данных) бывает полезно временно отключить все ограничения целостности для всех таблиц базы данных.
Инструмент это грубый (поскольку отключаются абслютно все ограничения), зато простой в использовании и не требующий глубокого анализа связей между таблицами - что потребуется для того, чтобы отключить только часть ограничений.

Полное отключение всех ограничений и триггеров для всех таблиц:

exec sp_MSforeachtable
@command1='alter table ? nocheck constraint all',
@command2='alter table ? disable trigger all'
go

Необходимо помнить, что эти операции не позволят выполнить оператор TRUNCATE TABLE, если на таблицах созданы внешние ключи (FOREIGN KEY) - увы, в этом случае удалять данные перед их повторной заливкой придётся с помощью медленных и скушных команд DELETE.

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

declare @cmd varchar(4000);
set @cmd = 'BEGIN TRY '
+ '  alter table ? with check check constraint all;'
+ '  alter table ? enable trigger all; '
+ 'END TRY '
+ 'BEGIN CATCH PRINT ''** ERROR on [?] - '' + ERROR_MESSAGE(); END CATCH';
exec sp_MSforeachtable @command1=@cmd
go
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org


 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

Profile

zinal: (Default)
Maksim Zinal

April 2017

M T W T F S S
     12
3456 789
10111213141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 23rd, 2017 06:46 pm
Powered by Dreamwidth Studios