Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyłączyć ograniczenie wyboru w programie SQL Server (przykłady T-SQL)

Gdy próbujesz wprowadzić dane do tabeli, która ma w pełni włączoną opcję CHECK ograniczenie, odniesiesz sukces tylko wtedy, gdy dane nie naruszają tego ograniczenia. Jeśli spróbujesz wprowadzić nieprawidłowe dane, operacja zakończy się błędem.

Ale co, jeśli znajdziesz się w sytuacji, w której naprawdę musisz wstawiaj dane, które naruszą CHECK ograniczenie? Być może ograniczenie już nie obowiązuje, a może masz wyjątek, w którym jeden wiersz może ominąć ograniczenie. Tak czy inaczej, nie będziesz w stanie wprowadzić niczego poza regułami ograniczenia.

Jeśli znajdziesz się w takiej sytuacji, zawsze możesz wyłączyć ograniczenie. Oto jak to zrobić za pomocą Transact-SQL.

Przykład 1 – Wyłącz ograniczenie SPRAWDŹ

Aby wyłączyć CHECK ograniczenie, użyj NOCHECK argument w ALTER TABLE oświadczenie.

Tak:

ALTER TABLE Occupation  
NOCHECK CONSTRAINT chkJobTitle; 

Ten kod wyłącza ograniczenie o nazwie chkJobTitle .

Przykład 2 – Przejrzyj ograniczenie SPRAWDŹ

Możemy zapytać o sys.check_constraints widok systemu, aby sprawdzić, czy nasze ograniczenie zostało wyłączone:

SELECT 
  name,
  is_disabled,
  is_not_trusted,
  definition
FROM sys.check_constraints;

Wynik:

+-----------------+---------------+------------------+----------------------------------------+
| name            | is_disabled   | is_not_trusted   | definition                             |
|-----------------+---------------+------------------+----------------------------------------|
| chkPrice        | 0             | 0                | ([Price]>(0))                          |
| chkValidEndDate | 0             | 0                | ([EndDate]>=[StartDate])               |
| chkTeamSize     | 0             | 0                | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | 1             | 1                | ([JobTitle]<>'Digital Nomad')          |
+-----------------+---------------+------------------+----------------------------------------+

W tym przypadku zaznaczyłem wszystkie CHECK ograniczenia z bieżącej bazy danych.

Widzimy, że jest to jedyny wyłączony (ponieważ jego is_disabled kolumna jest ustawiona na 1 ).

Możesz zauważyć, że jest_nie_zaufany kolumna jest również ustawiona na 1 . Oznacza to, że CHECK ograniczenie nie zostało zweryfikowane przez system dla wszystkich wierszy.

Innymi słowy, nie możemy już zakładać, że ograniczenie sprawdziło wszystkie dane. Fakt, że ograniczenie jest wyłączone, oznacza, że ​​dane są teraz w stanie dostać się do bazy danych bez sprawdzania przez ograniczenie. Dlatego istnieje możliwość, że w bazie danych znajdą się nieprawidłowe dane.

Jeśli kiedykolwiek będziesz musiał ponownie włączyć CHECK ograniczenia, będziesz miał możliwość przywrócenia zaufania ograniczenia (poprzez użycie WITH CHECK opcja). Spowoduje to sprawdzenie wszystkich istniejących wierszy przed włączeniem ograniczenia.

Będziesz mieć również możliwość nie sprawdzanie istniejących danych, ale należy to robić tylko w rzadkich przypadkach.

Zobacz, co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia CHECK w SQL Server, aby zademonstrować, w jaki sposób wpływa to na zaufanie, w zależności od tego, jak ponownie włączysz ograniczenie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LIMIT 10..20 w SQL Server

  2. Jak wykonać pakiet SSIS z platformy .NET?

  3. Zapytanie SQL, aby podzielić dane kolumny na wiersze

  4. Pomyślnie nawiązano połączenie z serwerem, ale podczas uzgadniania przed logowaniem wystąpił błąd

  5. Jak wykonać plik .sql za pomocą powershell?