Как обновить другую таблицу с самыми последними данными в SQL?

Просто сканируйте его:

>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'
1
задан JFV 11 June 2009 в 13:29
поделиться

3 ответа

Я не уверен, что это самый быстрый код в мире, это, очевидно, зависит от того, насколько близко расположены два сервера и сколько данных у вас есть в каждой таблице.

UPDATE Table1
SET 
    f2 = T2.f2, 
    f3 = convert(varchar, T2.f3, 101) 
FROM 
    Table1 T1
INNER JOIN 
    Server.DB.dbo.Table2 T2
ON 
    T1.f1 = T2.f1
WHERE 
    T2.f3 = (SELECT MAX(f3) FROM Server.DB.dbo.Table2 WHERE f1 = T1.f1)

Альтернатива (если у вас есть такой контроль) заключается в создании триггера в таблице 2, который помещает последнюю версию во временную таблицу при каждом ее обновлении.

Обновление: исправлен код.

1
ответ дан 3 September 2019 в 01:28
поделиться
and (b.f3 > c.f3 OR b.f3 is null)

В вашем предложении where, конечно.

Если я правильно понимаю ваш вопрос, в любом случае ...

0
ответ дан 3 September 2019 в 01:28
поделиться
UPDATE
     T1
SET
     f2 = T2.f2,
     f3 = T2.f3  -- If it's a date, save it as a date, not a VARCHAR
FROM
     dbo.Table1 T1
INNER JOIN Server.db.dbo.Table2 T2 ON
     T2.f1 = T1.f1
LEFT OUTER JOIN Server.db.dbo.Table2 T2_later ON
     T2_later.f1 = T2.f1 AND
     T2_later.f3 > T2.f3
WHERE
     T2_later.f1 IS NULL

Это может иметь некоторые проблемы с производительностью, выполняя это на серверах, если Table2 большой. Возможно, было бы лучше создать представление в этой базе данных и использовать его для обновлений:

CREATE VIEW dbo.T2_Latest
AS
     SELECT
          T2.f1,
          T2.f2,
          T2.f3
     FROM
          dbo.Table2 T2
     LEFT OUTER JOIN dbo.Table2 T2_later ON
          T2_later.f1 = T2.f1 AND
          T2_later.f3 > T2.f3
     WHERE
          T2_later.f1 IS NULL

Тогда вам просто нужно присоединиться к f1 (кстати, вам не нужны эти критерии как во INNER JOIN, так и в предложении WHERE) . Представление отфильтрует более ранние строки ДО того, как ему потребуется сравнить их на разных серверах.

В SSIS есть другие решения, использующие компонент Merge, компонент Lookup или компонент Join, которые, вероятно, будут работать лучше.

1
ответ дан 3 September 2019 в 01:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: