我在@temptable中有临时表数据我需要将这些数据与表名LU_BCOMS_UsersRepFamilies进行比较
使用这个@temptable数据我需要在主表LU_BCOMS_UsersRepFamilies中根据where条件替换以下列
1) RepFamily_RepFamilyId
2) Users_UserId
我的查询列在下面:
declare @tempTable
Table(RepFamily_RepFamilyId int,Users_UserId varchar(500),CreatedDate varchar(500),CreatedBy varchar(500))
insert into @tempTable values('676','MV10310','2014-05-20 13:30:29.000','MV10310')
MERGE INTO LU_BCOMS_UsersRepFamilies AS target
USING @tempTable AS source
ON target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId
AND target.Users_UserId = source.Users_UserId
WHEN MATCHED THEN
UPDATE SET
target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId,
target.Users_UserId = source.Users_UserId,
target.CreatedDate = source.CreatedDate,
target.CreatedBy = source.CreatedBy
WHEN NOT MATCHED BY TARGET THEN
INSERT (RepFamily_RepFamilyId, Users_UserId, CreatedDate,CreatedBy)
VALUES (source.RepFamily_RepFamilyId, source.Users_UserId, source.CreatedDate,source.CreatedBy)
WHEN NOT MATCHED BY SOURCE THEN
DELETE WHERE target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId and target.Users_UserId = source.Users_UserId;
执行我的查询后,我收到以下错误
错误: 关键字'WHERE'附近的语法不正确。
可以根据上面指定的要求修改我的查询
Example :
RepFamily_RepFamilyId Users_UserId CreatedDate CreatedBy
600 MV10310 date ravi
601 MV10310 date ravi
602 KV110 date suma
603 GV122 date rajesh
in my temp table I have
insert into @tempTable values('600','MV10310','date','ravi')
after merging my master table show look like below :
RepFamily_RepFamilyId Users_UserId CreatedDate CreatedBy
600 MV10310 date ravi
602 KV110 date suma
603 GV122 date rajesh
答案 0 :(得分:0)
您的WHERE
进入WHEN NOT MATCHED
行......
示例:
WHEN NOT MATCHED BY SOURCE AND SOMEVALUE=5 THEN
DELETE;
然而....在上面的代码中,您的WHERE
:
WHERE target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId and target.Users_UserId = source.Users_UserId
与您的USING-ON
相同:
ON target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId
AND target.Users_UserId = source.Users_UserId
所以,如果它NOT MATCHED BY SOURCE
(从源头丢失)你的地位永远不会满足,什么都不会删除...
我相信您只想删除WHERE,如下所示:
MERGE INTO LU_BCOMS_UsersRepFamilies AS target
USING @tempTable AS source
ON target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId
AND target.Users_UserId = source.Users_UserId
WHEN MATCHED THEN
UPDATE SET
target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId,
target.Users_UserId = source.Users_UserId,
target.CreatedDate = source.CreatedDate,
target.CreatedBy = source.CreatedBy
WHEN NOT MATCHED BY TARGET THEN
INSERT (RepFamily_RepFamilyId, Users_UserId, CreatedDate,CreatedBy)
VALUES (source.RepFamily_RepFamilyId, source.Users_UserId, source.CreatedDate,source.CreatedBy)
WHEN NOT MATCHED BY SOURCE AND target.Users_UserId IN (SELECT DISTINCT Users_UserId FROM @tempTable) THEN
DELETE;
答案 1 :(得分:0)
这是答案..
MERGE INTO LU_BCOMS_UsersRepFamilies AS target
USING @tempTable AS source
ON target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId
AND target.Users_UserId = source.Users_UserId
WHEN MATCHED THEN
UPDATE SET
target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId,
target.Users_UserId = source.Users_UserId,
target.CreatedDate = source.CreatedDate,
target.CreatedBy = source.CreatedBy
WHEN NOT MATCHED BY TARGET THEN
INSERT (RepFamily_RepFamilyId, Users_UserId, CreatedDate,CreatedBy)
VALUES (source.RepFamily_RepFamilyId, source.Users_UserId, source.CreatedDate,source.CreatedBy)
WHEN NOT MATCHED BY SOURCE AND target.Users_UserId = (select top 1 (A.Users_UserId) from @tempTable as A) Then
DELETE ;
答案 2 :(得分:0)
尝试更改上次删除声明,
DELETE source WHERE target.RepFamily_RepFamilyId = source.RepFamily_RepFamilyId and target.Users_UserId = source.Users_UserId;