Просто сканируйте его:
>>> 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'
Я не уверен, что это самый быстрый код в мире, это, очевидно, зависит от того, насколько близко расположены два сервера и сколько данных у вас есть в каждой таблице.
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, который помещает последнюю версию во временную таблицу при каждом ее обновлении.
Обновление: исправлен код.
and (b.f3 > c.f3 OR b.f3 is null)
В вашем предложении where, конечно.
Если я правильно понимаю ваш вопрос, в любом случае ...
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, которые, вероятно, будут работать лучше.