我有一个表格存储处方药信息,需要每天从中央处方表更新。临时表与药品表完全相同。临时表数据可能与主表完全相同(大多数情况下如此),也可能具有更新行或新行。
我有一个存储过程来更新主表,但它失败了,因为它不会更新空行(如果临时表中有新行)。
这是MSSQL Server 2005。
我的错误在哪里?
我有一个存储过程来更新主表,但它失败了,因为它不会更新空行(如果临时表中有新行)。
这是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]
编辑:
我采用了Rory的代码。谢谢,它工作得很好。
给Orion Edwards的一条注释:UPSERT / MERGE正是我想要的,但它不支持SQL Server 2005。显然,这是计划中的,但并没有在该版本中实现。它在Server 2008中可用。(根据Interwebs告诉我的内容。)