Оператор T-Sql для выполнения вставок или обновлений, сравнивающих данные в Master и данные в двух объединенных таблицах - PullRequest
1 голос
/ 14 ноября 2010

Как мне написать оператор SQL, который будет вставлять миллионы и обновлять миллионы записей на сервере Sql с помощью T-SQL? При вставке записей SQL должен быть в состоянии создать первичный ключ, используя критерии. Пример: Таблица 1 и Таблица 2 объединены уникальным ключом. И эти данные из этих таблиц сравниваются с основной таблицей, используя другой уникальный ключ между таблицей 1 и основной таблицей. Итерация по основной таблице, если данные существуют в таблице 1, затем выполняются необходимые записи обновления в таблице 3 или, если данные не существуют в таблице 2, затем вставка записи, которая находится в мастер-таблице, в таблицу 1 и таблицу 2. Ключ к сожалению, это varchar (10) в этом формате: 0002558201. Вот почему нам нужно получить последний ключ, используя MAX, а затем переформатировать с левыми '000'. В таблице также есть потерянные ключи, начинающиеся с RF ...., которые следует игнорировать при получении последнего первичного ключа в таблице и увеличивать первичные ключи как в таблице 1, так и в таблице 2. Первичный ключ в таблице 2 представляет собой целое число со знаком. Поскольку клиент не хочет рассматривать удаление этих записей. Также здесь используется внешний ключ, который мы используем для присоединения таблицы Master к этой таблице.

Пример данных для таблицы 1:

PKey_Id FName LName Foreign_Key_Master
0002558201 Ричард Смит 15494934

Пример данных для таблицы 2:

PKey_SNo Foreign_Key_Table1 Стоимость вызовов
1 0002558201 123000 50000

Пример данных для мастера:

PKey_QNo FirstName LastName HCost SalCalls
15494934 Ричард Смит 765 8766
15494935 Джон Доу 743 8342

1 Ответ

1 голос
/ 15 ноября 2010

К сожалению, SQL Server 2005 не поддерживает оператор MERGE.Лучшее, что вы можете сделать, - это двухэтапный процесс для каждой таблицы, которую вы хотите.

Выполните обновление примерно так:

 UPDATE Table3
    SET ...
   FROM Table2
        JOIN Table3
          ON Table2.key = Table3.key;

 INSERT Table3
 SELECT ...
   FROM Table2
        LEFT JOIN Table3
          ON Table2.key = Table3.key
  WHERE Table3.key IS NULL;

Предложение WHERE в последнем утвержденииобеспечит вставку только тех записей, которые не соответствуют ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...