Pregunta

Tengo un paquete DTS que genera un error con " Copiar objetos de SQL Server " tarea. La tarea es copiar una tabla más datos de un servidor de SQL Server 2000 SP4 a otro (la misma versión) y está dando el error: -

No se pudo encontrar la restricción CHECK para 'dbo.MyTableName', aunque la tabla está marcada como que tiene una.

La tabla de origen tiene una restricción de verificación definida que parece causar el problema. Después de ejecutar el paquete DTS, la cosa parece funcionar correctamente: la tabla, ¿todas las restricciones y los datos se crean en el servidor de destino? Pero el error anterior se genera provocando que los pasos posteriores no se ejecuten.

¿Alguna idea de por qué se produce este error?

¿Fue útil?

Solución

Esto indica que los metadatos en las tablas sys no están sincronizados con su esquema real. Si no ve ningún otro signo de corrupción más generalizada, haga una reconstrucción de la tabla copiándola en otra tabla (seleccione * en tabla nueva de la tabla antigua), elimine la tabla antigua y luego cambie el nombre de la nueva y reemplace las restricciones. ayuda. Esto es similar a cómo el Administrador corporativo de 2000 hace las cosas cuando inserta una columna que no está al final de la tabla, por lo que al insertar una nueva columna en el centro de la tabla y luego eliminar, logrará lo mismo si no lo hace. No quiero escribir manualmente las consultas.

Me preocuparía un poco el estado de la base de datos en su totalidad si observa otras incidencias de este tipo de error. (Supongo que aquí ya ha ejecutado los comandos CHECKDB y que el error persiste ...)

Otros consejos

Este error comenzó cuando se agregó una nueva columna (con una restricción de verificación) a una tabla existente. Para investigar tengo: -

  • Copió la tabla en un servidor SQL Server de destino diferente y obtuvo el mismo error.
  • Creó una nueva tabla con exactamente la misma estructura pero diferente nombre y se copió sin error.
  • Se eliminó y se volvió a crear la restricción de verificación en la tabla de problemas, pero sigue apareciendo el mismo error.
  • dbcc checktable ('MyTableName') con ALL_ERRORMSGS no da errores.
  • dbcc checkdb en la base de datos de origen y destino no produce errores.

Es interesante que el paquete DTS parece: -

  • Copia la tabla.
  • Copia los datos.
  • Crea las restricciones

Debido a que el tiempo de creación de la restricción de verificación es 7 minutos después de la hora de creación de la tabla, es decir, crea la restricción de verificación DESPUÉS de mover los datos. Tiene sentido ya que no tiene que verificar los datos mientras se están copiando, lo que supuestamente mejora el rendimiento.

Como sugiere Godeke, creo que algo se ha corrompido en las tablas del sistema, como funciona una nueva tabla con las mismas columnas. ¿A pesar de que las declaraciones DBCC no dan errores?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top