sql >> Database >  >> RDS >> Sqlserver

Hoe u alle beperkingen van CHECK en externe sleutels in een database in SQL Server uitschakelt (T-SQL-voorbeelden)

U kunt de onderstaande code gebruiken om alle CHECK . uit te schakelen en externe sleutelbeperkingen voor de huidige database in SQL Server.

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

Dit maakt gebruik van Microsoft's ongedocumenteerde sp_MSforeachtable opgeslagen procedure. Met deze procedure kunt u taken uitvoeren voor elke tabel in een database. Het is dus perfect voor onze taak hier - om alle CHECK . uit te schakelen beperkingen binnen de huidige database.

Hieronder ziet u een voorbeeld waarin ik dit doe en vervolgens het resultaat controleer.

Voorbeeld 1 – Bekijk de beperkingen

Ik zal eerst even kijken naar de huidige CHECK en externe sleutelbeperkingen in de database, om te zien of ze al dan niet zijn ingeschakeld of uitgeschakeld.

SELECT OBJECT_NAME(parent_object_id) AS 'Table', naam AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM sys.check_constraint;
 Resultaat:

+----------------+-----------------+----------- ----+------------------+| Tafel | beperking | is_disabled | is_not_trusted ||----------------+-----------------+------------ ---+------------------|| BeperkingTest | chkPrijs | 0 | 0 || BeperkingTest | chkValidEndDate | 0 | 0 || BeperkingTest | chkTeamSize | 0 | 0 || beroep | chkJobTitel | 0 | 0 |+----------------+-----------------+------------ ---+------------------+

Er zijn dus momenteel vier CHECK beperkingen in de database, voor twee verschillende tabellen.

We kunnen zien dat alle beperkingen zijn ingeschakeld omdat is_disabled is ingesteld op 0 .

Voorbeeld 2 – De beperkingen uitschakelen

Nu zal ik alle beperkingen uitschakelen:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

Het is meestal een goed idee om ervoor te zorgen dat u de juiste database gebruikt wanneer u dit soort dingen doet. We zouden dus aan de bovenstaande code kunnen toevoegen door expliciet over te schakelen naar de juiste database:

GEBRUIK Test;EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

In dit geval schakel ik over naar een database genaamd Test .

Voorbeeld 3 – Controleer het resultaat

Nadat ik de bovenstaande code heb uitgevoerd, voer ik nu dezelfde query uit als in het eerste voorbeeld om het resultaat te zien.

SELECT OBJECT_NAME(parent_object_id) AS 'Table', naam AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM sys.check_constraint;
 Resultaat:

+----------------+-----------------+----------- ----+------------------+| Tafel | beperking | is_disabled | is_not_trusted ||----------------+-----------------+------------ ---+------------------|| BeperkingTest | chkPrijs | 1 | 1 || BeperkingTest | chkValidEndDate | 1 | 1 || BeperkingTest | chkTeamSize | 1 | 1 || beroep | chkJobTitel | 1 | 1 |+----------------+-----------------+------------ ---+------------------+

Dus alle beperkingen in de database zijn uitgeschakeld (omdat de is_disabled kolom is ingesteld op 1 voor die beperkingen).

Merk op dat de is_not_trusted kolom is ook ingesteld op 1 . Dit is een belangrijke overweging, vooral als u van plan bent een van uw uitgeschakelde beperkingen opnieuw in te schakelen.

Zie Wat u moet weten over WITH NOCHECK bij het inschakelen van een CHECK-beperking in SQL Server voor informatie over het herstellen van vertrouwen wanneer u uw beperkingen opnieuw inschakelt. De informatie in dat artikel is ook van toepassing op externe sleutels.

Schakel de beperkingen afzonderlijk uit

Als u de beperkingen alleen één voor één wilt uitschakelen, raadpleegt u Een CHECK-beperking in SQL Server uitschakelen voor voorbeelden.


  1. MariaDB JSON_EXTRACT() uitgelegd

  2. Waarom heeft PostgreSQL gebruikers en groepen samengevoegd tot rollen?

  3. Waarom lopen SQL-id-reeksen niet synchroon (met name bij gebruik van Postgres)?

  4. Typische WordPress-fouten herstellen