SQL Server: Jak sprawić, by serwer sprawdzał wszystkie jego ograniczenia?
Wydaje się, że niektóre skrypty generowane przez Enterprise Manager * (lub nie, to nie ma znaczenia) stworzyły check constraints z NOCHECK .
Teraz, gdy ktoś modyfikuje tabelę, SQL Server natrafia na nieudane ograniczenia czeków i wyrzuca błędy.
Czy Mogę sprawić, że SQL przejdzie przez wszystkie ograniczenia sprawdzania i je sprawdzi?
Running:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Włącza tylko wcześniej wyłączone ograniczenia sprawdzania, nie sprawdza oni.
Przypisy
* SQL Server 2000
3 answers
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS nie sprawi, że Twoje ograniczenia będą zaufane. Zgłosi wszelkie wiersze, które naruszają ograniczenia. Aby faktycznie wszystkie Twoje ograniczenia były zaufane, możesz wykonać następujące czynności:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS --This reports any data that violates constraints.
--This reports all constraints that are not trusted
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.check_constraints
WHERE is_not_trusted = 1
UNION ALL
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.foreign_keys
WHERE is_not_trusted = 1
ORDER BY table_name
W SQL Server 2000 Można znaleźć wszelkie niezaufane ograniczenia za pomocą:
--Reports all constraints that are not trusted (SQL 2000)
SELECT name, type, status,
(status & 2048) AS IsTrusted,
(status & 256) AS IsEnabled,
OBJECTPROPERTY(id,'CnstIsNotTrusted') as is_not_trusted,
OBJECTPROPERTY(id,'CnstIsDisabled') as is_disabled
FROM sysobjects
WHERE type IN ('C', 'F') --C=Constraint, F=Foreign Key
AND OBJECTPROPERTY(id,'CnstIsNotTrusted') <> 0
AND OBJECTPROPERTY(id,'CnstIsDisabled') = 0
Ograniczenia są następnie ponownie przekierowywane z zaznaczeniem :
--This makes all constraints trusted
-- but first anything reported by DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS must be fixed.
exec sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
Uwaga : na ostatnim stwierdzeniu {[3] } nie jest literówką. "Z czekiem" sprawdzi wszystkie dane tabeli, aby upewnić się, że nie ma naruszeń i sprawi, że ograniczenie będzie zaufane, podczas gdy sprawdzenie upewni się, że ograniczenia są włączone.
Zobacz: http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-16 20:51:03
Sprawdza wszystkie ograniczenia we wszystkich tabelach w bieżącej bazie danych, czy ograniczenie jest włączone, czy nie:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
Aby sprawdzić tylko włączone ograniczenia:
DBCC CHECKCONSTRAINTS
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 13:06:18
Zrób to:
ALTER TABLE dbo.Test
WITH CHECK CHECK CONSTRAINT CK_Test;
Wyjaśnienie: Czy możesz zaufać swoim ograniczeniom?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 14:59:47