sql-server - varias - ver estado de base de datos sql server
SQL Server: ¿Cómo hacer que el servidor verifique todas sus restricciones de verificación? (3)
hacer esto:
ALTER TABLE dbo.Test
WITH CHECK CHECK CONSTRAINT CK_Test;
Explicación: ¿Puedes confiar en tus limitaciones?
Parece que algunos scripts generados por Enterprise Manager * (o no, no importa) crearon restricciones de verificación CON NOCHECK .
Ahora, cuando alguien modifica la tabla, SQL Server está tropezando con las restricciones de verificación fallidas y arrojando errores.
¿Puedo hacer que SQL pase por todas sus restricciones de verificación y las verifique?
Corriendo:
sp_msforeachtable ''ALTER TABLE ? CHECK CONSTRAINT all''
solo habilita las restricciones de verificación previamente deshabilitadas, en realidad no las verifica.
Notas al pie
* SQL Server 2000
Comprueba todas las restricciones en todas las tablas en la base de datos actual, ya sea que la restricción esté habilitada o no:
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
Para verificar solo las restricciones habilitadas:
DBCC CHECKCONSTRAINTS
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS realmente no hará que sus restricciones sean confiables. Informará cualquier fila que viole las restricciones. Para hacer realmente confiables todas sus restricciones, puede hacer lo siguiente:
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
En SQL Server 2000 puede encontrar restricciones no confiables con:
--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
Las restricciones se vuelven a habilitar con el cheque :
--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''
Nota : en la última declaración, WITH CHECK CHECK
no es un error tipográfico. "WITH CHECK" verificará todos los datos de la tabla para asegurarse de que no haya violaciones, y hará que la restricción sea confiable, mientras que la verificación asegurará que las restricciones estén habilitadas.
Véase también: http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx