У меня есть таблица, в которой хранится информация о лекарственных препаратах, которую необходимо обновлять ежедневно из центрального формуляра. Временная таблица идентична таблице лекарств. Данные временной таблицы могут быть идентичны (и в большинстве случаев будут) основной таблице или могут иметь обновленные строки или новые строки.
У меня есть хранимая процедура для обновления основной таблицы, но она не работает, потому что она не будет обновлять пустые строки (если есть новая строка во временной таблице).
Это MSSQL Server 2005.
Где я тут ошибаюсь:
-- Insert statements for procedure here
UPDATE [RX_Billing].[dbo].[FS_Drug]
SET [TRADENAME] = [RX_Billing].[dbo].[FS_Drug_TEMP].[TRADENAME]
,[CDM] = [RX_Billing].[dbo].[FS_Drug_TEMP].[CDM]
,[NDC] = [RX_Billing].[dbo].[FS_Drug_TEMP].[NDC]
,[IP_COST] = [RX_Billing].[dbo].[FS_Drug_TEMP].[IP_COST]
,[OP_COST] = [RX_Billing].[dbo].[FS_Drug_TEMP].[OP_COST]
,[HH_COST] = [RX_Billing].[dbo].[FS_Drug_TEMP].[HH_COST]
,[VAR_COST] = [RX_Billing].[dbo].[FS_Drug_TEMP].[VAR_COST]
,[LSTUPDATE] = [RX_Billing].[dbo].[FS_Drug_TEMP].[LSTUPDATE]
FROM [RX_Billing].[dbo].[FS_Drug]
RIGHT OUTER JOIN [RX_Billing].[dbo].[FS_Drug_TEMP] ON
[RX_Billing].[dbo].[FS_Drug].[TRADENAME] =
[RX_Billing].[dbo].[FS_Drug_TEMP].[TRADENAME]
EDIT:
Я пошел с кодом Рори. Спасибо, это прекрасно работает.
Примечание для Ориона Эдвардса: UPSERT / MERGE - это именно то, что я хотел, но он не поддерживается в SQL Server 2005. Очевидно, он был запланирован, но не был выпущен. Он доступен в Server 2008. (Из того, что мне сказали Интернет).