我有一個表,我正在嘗試向其中附加唯一值。每個月我都會獲得要匯入此表的用戶登錄串列。我想保留所有原始值,只是將新的和唯一的值附加到現有表中。表和平面檔案都有一個列,具有唯一值,構建如下:
_____
login
abcde001
abcde002
...
_____
我將平面檔案批量攝取到臨時表中,如下所示:
IF OBJECT_ID('tempdb..#FLAT_FILE_TBL') IS NOT NULL
DROP TABLE #FLAT_FILE_TBL
CREATE TABLE #FLAT_FILE_TBL
(
ntlogin2 nvarchar(15)
)
BULK INSERT #FLAT_FILE_TBL
FROM 'C:\ImportFiles\logins_Dec2021.csv'
WITH (FIELDTERMINATOR = ' ');
是否有一個連接可以為我提供帶有現有值 附加新唯一值的表?我寧愿不硬編碼一個回圈來逐行評估它。
類似(偽代碼):
append unique {login} from temp_tbl into original_tbl
希望這對外面的人來說是一個簡單的答案。
謝謝!
uj5u.com熱心網友回復:
Reddit r/sql 上的海報提供了這個答案,我正在追求:
合并陳述句?
看起來使用合并陳述句將完全符合我的要求。感謝那些已經發布回復的人。
uj5u.com熱心網友回復:
您可以使用“EXISTS”子句檢查記錄是否存在,如果目標表中不存在則插入。您也可以使用 MERGE 陳述句來實作相同的功能。根據您要對目標表中的現有記錄執行的操作,您可以修改 Merge 陳述句。這里因為你只想插入新記錄,所以只需要指定新記錄進來時你想做什么。 下面是一個例子
MERGE original_tbl T
USING temp_tbl S
ON T.login = S.login
WHEN NOT MATCHED THEN
INSERT (login)
VALUES(S.login)
另一種解決方案是將目標表左連接到臨時表并僅在記錄不存在時插入。
INSERT INTO original_tbl(login)
SELECT S.Login
FROM temp_tbl S
LEFT JOIN original_tbl T
ON S.Login = T.Login
WHERE T.Login IS NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384632.html
標籤:sql sql-server
下一篇:SQLCASE滾動日期差異
