Sql-Server
合併兩個表
在
SQL Server 2008 R2
我有一個名為的主表Employees
,其中包含大約 20 個欄位。我有第二個電子表格,其中包含除 5 之外的所有欄位UpdateToEmployees
,我需要與之合併,Employees
但僅在值不相同的地方。最有效的方法是什麼?我的思考過程(可能是很長的路要走)是:
- 執行一條
Select
語句來獲取值不同的行- 獲取該結果集並插入到臨時表中
exists
,以是/否值標記欄位- 如果該欄位
exists
包含 yes 值 - 執行更新查詢- 如果該欄位
exists
不包含值 - 執行插入查詢使用下面的 DDL - 我如何加入 empID 並更新 where
when matched
= Yes 或 True 的記錄(無論它返回的是什麼)並插入目前不存在的記錄Employees
Create Table Employees ( empid varchar(50) ,empaddress varchar(500) ,phone varchar(12) ,emcontact1 varchar(500) ,emcontact2 varchar(500) ,active varchar(10) ,manager varchar(50) ,paygrade int ) Insert Into Employees (empid,empaddress,phone,emcontact1, emcontact2, active, manager, paygrade) VALUES ('aa11', '123 blue', '1234567890', 'A A', 'B B', 'Yes', 'Manager 1', 1) ,('bb22', '123 green', '4567890000', 'B B', 'A A', 'Yes', 'Manager 2', 1) ,('cc33', '123 red', '789123456', 'E E', 'R R', 'Yes', 'Manager 3', 2) Create Table UpdateToEmployees ( empid varchar(50) ,empaddress varchar(500) ,phone varchar(12) ) Insert Into UpdateToEmployees (empid, empaddress, phone) VALUES ('aa11', '611 pink', '9999999999') ,('cc33', '212 orange', '0000000000') ,('ee99', '1411 red', '4444444444') ,('zz22', '2212 fox', '5555555555') ,('tt83', '1999 prince', '7777777777')
未經
測試,因為我目前無法訪問 SQL Server,但試試這個,它應該可以工作,或者至少為您指出正確的Merge
語句語法方向MERGE Employees emp USING UpdateToEmployees ute ON [emp].[empid] = [ute].[empid] WHEN MATCHED THEN UPDATE SET [emp].[empaddress] = [ute].[empaddress] ,[emp].[phone] = [ute].[phone] WHEN NOT MATCHED BY TARGET THEN INSERT (empid, empaddress, phone) VALUES ([ute].[empid], [ute].[empaddress], [ute].[phone]);
自 SQL Server 2008 以來,該
MERGE
語句已經可用,這將更加高效,並且是一個手工製作的“檢查然後更新或插入”過程。請參閱https://msdn.microsoft.com/en-us/library/bb510625.aspx以供參考,儘管您可能會發現查找教程比從教程中工作更容易(http://www.made2mentor.com/2013 /05/writing-t-sql-merge-statements-the-right-way/是我粗略搜尋中出現的第一個)。