Я создал функцию в C #, которая позволяет мне копировать запись и связанные с ней дочерние элементы в новую запись и новые связанные дочерние элементы в той же базе данных. (Это для приложения, которое позволяет использовать предыдущую работу в качестве шаблона для новой работы.)
В любом случае, это прекрасно работает ... Вот описание того, как оно выполняет копию:
Заполняет двухстолбцовую таблицу поиска на основе памяти текущим первичным ключом каждой записи. Затем, когда он по отдельности создает каждую новую запись копии, он обновляет справочную таблицу с помощью Identity PK новой записи [получено из SCOPE_IDENTITY ()]. Теперь, когда он копирует любые связанные дочерние элементы, он может искать новый родительский PK, чтобы установить FK для новой записи.
При тестировании копирование реляционной структуры на локальный экземпляр SQL Server 2005 Express Edition заняло всего минуту. К сожалению, производство оказывается ужасно медленным! Мои пользователи имеют дело с более чем 60 000 записей на родительскую запись по локальной сети на наш SQL Server! Хотя моя функция копирования все еще работает, каждая из этих записей представляет отдельную команду SQL UPDATE, и она загружает SQL Server примерно на 17% ЦП по сравнению с его обычным 2% простоя. Я только что закончил тестирование 50 000 записей, и это заняло почти 20 минут!
Есть ли способ дублировать эту функцию в запросах SQL или хранимых процедурах, чтобы сервер SQL выполнял всю работу по копированию вместо того, чтобы передавать ее по локальной сети от каждого клиента?
(мы используем Microsoft SQL Server 2005 Standard Edition.)
Спасибо!
-Derek