SQL Server 2008 R2 - Comment vérifier les contraintes étrangères clés dans une transaction que lorsqu'ils ont été commis?

dba.stackexchange https://dba.stackexchange.com/questions/9444

Question

Nous synchronisons tables entre deux bases de données (oui, il doit être fait par notre logiciel et non par réplication, etc.)

Les deux bases de données sont identiques à de nombreuses contraintes de clés étrangères sur les tables.

Dans une transaction, nous insérer des lignes à différentes tables. Toute la transaction laissera les tables dans un état où toutes les contraintes sont remplies.

Mais il peut très bien être, qu'une ligne est insérée avec une FK d'une autre table qui n'a pas encore été inséré dans un état intermédiaire de la transaction.

Est-il possible de laisser SQL Server accepter cela, et seulement vérifier les violations est une fois engagé toute la transaction?

Merci pour votre aide!

Était-ce utile?

La solution

Non, serveur vérifie les clés étrangères pour chaque transaction à l'intérieur de l'instruction

La voie est de désactiver tous les FKeys dans la cible DB juste après le début de l'opération et leur permettre de retour juste avant commettre.

Script utiles:

DECLARE @sql NVARCHAR(MAX) = ''

SELECT @sql = @sql + N'ALTER TABLE [' + OBJECT_SCHEMA_NAME(fk.parent_object_id)+N'].['+OBJECT_NAME(fk.parent_object_id)+N'] NOCHECK CONSTRAINT ['+fk.NAME+N'];'+NCHAR(13)+NCHAR(10)
FROM sys.foreign_keys fk

PRINT @sql

Autres conseils

Non, thats pas supporté!

Vous devriez essayer d'organiser vos déclarations dans l'ordre correct qui évite violation FK.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top