Ошибка при копировании проверочного ограничения с помощью DTS

StackOverflow https://stackoverflow.com/questions/208716

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть пакет DTS, который вызывает ошибку при выполнении задачи «Копировать объекты SQL Server».Задача копирует таблицу и данные с одного сервера SQL Server 2000 SP4 на другой (той же версии) и выдает ошибку:-

Не удалось найти ограничение CHECK для «dbo.MyTableName», хотя таблица помечена как имеющая такое ограничение.

В исходной таблице определено одно проверочное ограничение, которое, по-видимому, является причиной проблемы.После запуска пакета DTS все работает правильно: таблица, все ограничения и данные созданы на целевом сервере?Но возникает ошибка, приведенная выше, из-за которой последующие шаги не выполняются.

Есть идеи, почему возникает эта ошибка?

Это было полезно?

Решение

Это указывает на то, что метаданные в таблицах sys не синхронизированы с вашей фактической схемой.Если вы не видите никаких других признаков более общего повреждения, перестройте таблицу, скопировав ее в другую таблицу (выберите * в новую таблицу из старой таблицы), удалив старую таблицу, а затем переименовав новую и заменив ограничения. помощь.Это похоже на то, как Менеджер предприятия для 2000 делает что-то, когда вы вставляете столбец, который не находится в конце таблицы, поэтому вставка нового столбца в середину таблицы, а затем удаление приведет к тому же результату, если вы не не хочу вручную писать запросы.

Я был бы несколько обеспокоен состоянием базы данных в целом, если бы вы увидели другие случаи ошибок такого рода.(Я предполагаю, что вы уже выполнили команды CHECKDB и ошибка не устранена...)

Другие советы

Эта ошибка возникла, когда в существующую таблицу был добавлен новый столбец (с проверочным ограничением).Для расследования у меня есть:-

  • Скопировал таблицу на другой целевой SQL-сервер и получил ту же ошибку.
  • Создал новую таблицу с точно такой же структурой, но с другим именем и скопировал без ошибок.
  • Удалил и заново создал проверочное ограничение для проблемной таблицы, но все равно получаю ту же ошибку.
  • Контрольная таблица dbcc («MyTableName») с ALL_ERRORMSGS не выдает ошибок.
  • dbcc checkdb в исходной и целевой базе данных не выдает ошибок.

Интересно, что пакет DTS выглядит следующим образом:-

  • Скопируйте таблицу.
  • Скопируйте данные.
  • Создайте ограничения

Поскольку время создания проверочного ограничения составляет 7 минут после времени создания таблицы, т.е.он создает проверочное ограничение ПОСЛЕ перемещения данных.Это имеет смысл, поскольку ему не нужно проверять данные во время копирования, что предположительно повышает производительность.

Как предполагает Годеке, я думаю, что что-то повреждено в системных таблицах, поскольку работает новая таблица с теми же столбцами.Даже если операторы DBCC не выдают ошибок?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top