Необработанный обходной путь: в SQL Server 2005 и более поздних версиях вы можете написать прямой оператор INSERT ... SELECT (используя связанные серверы, если они находятся в разных экземплярах SQL), а затем обернуть его в TRY / CATCH блок. Если это копирует, хорошо, если это терпит неудачу, ошибка поймана и обработана.
Возникнут дополнительные проблемы, например, если у целевой таблицы есть дополнительный столбец, который можно обнулять или имеет значение по умолчанию, но это начало.
- добавив это в ответ на ваш комментарий -
Как написать операторы "INSERT ... SELECT" для всех ваших таблиц менее чем за минуту:
Во-первых, каждая команда выглядит так:
INSERT TargetDB.dbo.xxx select * from xxx
Здесь используется SELECT *, но, поскольку вы ищете точно совпадающие таблицы, это не должно быть проблемой. Затем, чтобы записать один из них для каждой пользовательской таблицы в выбранной в данный момент базе данных, запустите:
SELECT 'INSERT TargetDB.dbo.' + name + ' select * from ' + name
from sys.tables
Замените "TargetDB" целевой базой данных, запустите, вырезайте и вставьте результаты, а затем работайте в блоке TRY / CATCH.