0
我有两个表t和t1。 问题: 如果#t1中没有数据可用,那么我需要插入数据,如果数据可用,那么我需要更新。假设如果我从#t的#t1的终止日期列第一次空白,那么我需要插入,如果我得到具有相同的ID相同的活动日期的数据,然后我需要更新#t1终止日期列中的日期,我不应该在表中有第二项。我如何处理它。SQL Server查询帮助更新行而不是插入
CREATE TABLE #t (
id INT
,activedate VARCHAR(15)
,terminationdate VARCHAR(20)
)
CREATE TABLE #t1 (
id INT
,activedate VARCHAR(15)
,terminationdate VARCHAR(20)
)
INSERT INTO #t
VALUES (
1
,'2006-01-01'
,NULL
)
,(
1
,'2006-01-01'
,'2006-01-31'
)
SELECT *
FROM #t
SELECT *
FROM #t1
MERGE INTO #t1 ds
USING (
SELECT DISTINCT *
FROM #t
) al
ON ds.id = al.id
AND ds.activedate = al.activedate
AND ds.terminationdate = al.terminationdate
WHEN NOT MATCHED
THEN
INSERT (
id
,activedate
,terminationdate
)
VALUES (
id
,activedate
,terminationdate
)
WHEN MATCHED
AND ds.terminationdate = ''
THEN
DELETE
WHEN MATCHED
AND ds.id = al.id
AND ds.activedate = al.activedate
THEN
UPDATE
SET ds.terminationdate = al.terminationdate;
进出料放:
第一次
id activedate terminationdate
1 2006-01-01 null
,如果我得到terminationdate(假设2006- 8-30)具有相同的有效日期forsame ID,然后记录需要更新,而不是2次记录条目
id activedate terminationdate
1 2006-01 - 01 2006 - 8 - 30
注: 如果我们可以通过改变th e上面的查询将是非常好的,否则共享替代方法来实现它。
在合并中,我们可以删除记录,如果只匹配。 – Prasad
@Prasad:不,根据源代码不匹配的记录也可以使用SQL SERVER 2008 R2删除(如果需要).. –