我想将名为temp_menu
的表中的数据插入另一个名为menu
的表中。
它们具有相同的结构,它们存储相同的数据,我想创建一个存储过程来检查表之间的差异。如果有任何不同的行且表menu
中不存在行,我想将它们插入menu
;如果行存在,如果menu
列高于DateReg
表中的DateReg
列,我想更新temp_menu
中的行。
表格具有以下结构:
CREATE TABLE [dbo].[Menu_Temp]
(
[Date] [datetime] NOT NULL,
[Ref] [int] NOT NULL,
[Art] [char](60) NOT NULL,
[Dish] [char](60) NOT NULL,
[DateReg] [datetime] NOT NULL,
[Zone] [char](60) NOT NULL,
);
我有这段代码来检查表之间的差异:
SELECT *
INTO #diffs
FROM [Regi].dbo.menu
EXCEPT
SELECT * FROM [Regi].dbo.menu_Temp
IF @@ROWCOUNT = 0
RETURN
SELECT * FROM #diffs
答案 0 :(得分:1)
详细信息如下:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql
您的情况的一个例子可能是......
MERGE
[Regi].dbo.menu
USING
[Regi].dbo.menu_Temp
ON (menu_Temp.[Ref] = menu.[Ref]) -- Assumes [Ref] is the identifying column?
WHEN
MATCHED AND (menu_Temp.[DateReg] > menu.[DateReg])
THEN
UPDATE SET [Art] = menu_Temp.[Art],
[Dish] = menu_Temp.[Dish],
[Zone] = menu_Temp.[Zone],
[Date] = menu_Temp.[Date],
[DateReg] = menu_Temp.[DateReg]
WHEN
NOT MATCHED
THEN
INSERT (
[Date],
[Ref],
[Art],
[Dish],
[DateReg],
[Zone]
)
VALUES (
menu_Temp.[Date],
menu_Temp.[Ref],
menu_Temp.[Art],
menu_Temp.[Dish],
menu_Temp.[DateReg],
menu_Temp.[Zone]
)
http://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=b47d7e879856ffe6210589f6bb64829f