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刪除(如果需要).. –