【发布时间】:2021-12-04 19:53:38
【问题描述】:
我正在使用merge into 声明
我有一个看起来像这样的表(首先我像这样插入)使用以下查询:
| 5 | 2 |
| 5 | 3 |
| 5 | 5 |
| 5 | 6 |
表格类型:
CREATE TYPE [dbo].[userid] AS TABLE(
[userid] [bigint] NULL
)
GO
现在我想要以下输出:
| 5 | 2 |
| 5 | 3 |
| 5 | 6 |
我这样写下面的查询:
--use test
declare @sid varchar(100) = '5'
declare @uid as userid
insert into @uid(userid) values(2)
insert into @uid(userid) values(3)
--insert into @uid(userid) values(5) // I remove this line
insert into @uid(userid) values(6)
MERGE INTO dbo.test_master AS dest
USING @uid AS sou ON
dest.sid = @sid
AND
sou.userid = dest.testid
WHEN MATCHED THEN UPDATE SET
dest.testid = sou.userid
WHEN NOT MATCHED THEN
INSERT( sid, testid )
VALUES( @sid, sou.userid )
--WHEN NOT MATCHED BY SOURCE
-- THEN
-- DELETE
;
我正在努力实现这个输出
| 5 | 2 |
| 5 | 3 |
| 5 | 6 |
我正在使用delete 关键字,请参阅我的 SQL 查询,但它正在从表中删除所有记录。我试了,还是不行。
【问题讨论】:
-
您需要将您的
TYPE dbo.userid重命名为TYPE dbo.UserIdTable否则您只会迷惑自己(和我们......) -
样本数据上的列名会有所帮助
标签: sql-server merge