相关疑难解决方法(0)

MERGE查询和删除记录

我有一个看起来像这样的表:

AccountID, ItemID
1, 100
1, 200
2, 300
Run Code Online (Sandbox Code Playgroud)

我有一个proc接受一个表值参数,该参数更新与帐户关联的项目.我们将传递以下内容:

AccountID, ItemID
3, 100
3, 200
Run Code Online (Sandbox Code Playgroud)

proc类似于:

procedure dbo.MyProc( @Items as dbo.ItemListTVP READONLY )
AS
BEGIN
  MERGE INTO myTable as target
    USING @Items
       on (Items.AccountId = target.AccountId)
       AND (Items.ItemId = target.ItemId)
    WHEN NOT MATCHED BY TARGET THEN
        INSERT (AccountId, ItemId)
        VALUES (Items.AccountId, Items.ItemId)

   ;

END
Run Code Online (Sandbox Code Playgroud)

根据传入的数据,我希望它能在表中添加2条新记录.

我想要的是有一个WHEN NOT MATCHED BY SOURCE子句,它将删除不匹配的指定帐户的项目.

例如,如果我通过

AccountID, ItemID
1, 100
1, 400
Run Code Online (Sandbox Code Playgroud)

然后我希望它删除1,200的记录; 但是留下所有其他人.

如果我这样做:

WHEN NOT MATCHED BY SOURCE THEN
  DELETE; …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge sql-server-2008-r2

28
推荐指数
3
解决办法
2万
查看次数

SQL Server MERGE语句的问题

来源表

Id, Name, Address
1   A     #202
1   A     #203
1   A     #204
2   A     #202
Run Code Online (Sandbox Code Playgroud)

目标表

Id, Name, Address
1   A     NULL
Run Code Online (Sandbox Code Playgroud)

合并之后

Id, Name, Address
1   A     #202
2   A     #202
Run Code Online (Sandbox Code Playgroud)

我正在使用这个SQL

create table #S   (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
create table #T   (ID int, Name varchar(25) NULL, Address varchar(25) NULL)

 INSERT #S values(1, 'A', '#202')
 INSERT #S values(1, 'A', '#203')
 INSERT #S values(1, 'A', '#203')
 INSERT #S values(1, 'A', '#204')

 INSERT #T values(1, 'A', …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server merge sql-server-2008

18
推荐指数
1
解决办法
3万
查看次数