Вам будет сложно победить производительность BCP и SQL с помощью чего-либо еще. Если процедуры обновления длинные и раздутые, потому что они перебирают таблицы, тогда я точно понимаю, почему вы хотите перейти на .NET. Но вы, вероятно, увеличите производительность, если поймете, как переписать их все красиво и на основе SET. БКП не сможет быть побежденным. Когда я использовал SQL Server 2000, BCP часто был быстрее, чем DTS. И SSIS в целом (из-за всей проверки типов данных), кажется, намного медленнее, чем DTS. Без сомнения, если вы убьете выступление, к вам придут люди. Тем не менее, если вы выполняете тонну построчных сложных вычислений, оптимизация в хранимую процедуру CLR или даже в приложение .NET, вызываемое из SQL Server для выполнения обработки, вероятно, приведет к ускорению. Конечно, если бы вы обрабатывали строки и вам удавалось переписать запросы для выполнения обработки множеств, вы, вероятно, получили бы большую скорость. Но в зависимости от сложности вычислений .NET может помочь.
Теперь, если изменение внешнего интерфейса может немедленно обновить и распространить данные, то вы можете захотеть изменить вещи на .NET, чтобы после изменения строки они могли быть пересчитаны и обновлены все клиенты. Однако, если много строк изменено или база данных просто огромна, то вы снизите производительность. Если операция должна быть сделана навалом, то, вероятно, наилучшим является способ, которым она выполняется в настоящее время.
Единственное, что я мог бы сделать, это то, что, возможно, существует много дубликатов SQL, которые выглядят одинаково, за исключением имени таблицы и / или имен столбцов. Если это так, вы, вероятно, можете использовать .NET в сочетании с SQL-SMO (или DMO при использовании SQL Server 2000) для генерации кода.
Вот пример, который я часто вижу для загрузки хранилища данных
Предполагается, что некоторые таблицы строк загружены данными из источника
выбрать измененные строки из источника во временных таблицах
посмотреть, были ли изменены какие-либо важные столбцы
если это так, прекратить существующую строку (или клонировать ее в некоторую таблицу истории)
вставить / обновить новую строку
Я часто вижу один из этих запросов на таблицу, и единственными вариантами являются имена таблиц / столбцов и, возможно, ссылки на ключевой столбец. Вы можете легко получить определения столбцов и ключей из SQL Server, а затем создать программу .NET для создания INSERT / SELECT / ETC. В худшем случае вам может понадобиться сохранить таблицу какого-либо типа с TABLE_NAME, COLUMN_NAME для важных столбцов. Тогда вместо того, чтобы оборачивать сложный процесс ETL и 20 или 200 запросов на обновление, вам просто нужно обернуть голову вокруг ОБНОВЛЕНИЯ и одного запроса. Любые изменения в том, как все делается, можно выполнить один раз и применить ко всем запросам.
В частности, я предполагаю, что вы можете применить эту технику к отдельным клиентским базам данных, если вы еще этого не сделали. Вероятно, все сценарии запросов / массового копирования одинаковы или почти одинаковы, за исключением имени базы данных / сервера. Таким образом, вы можете просто сгенерировать их на основе таблицы КЛИЕНТОВ или чего-то еще .....