[英]Inserting from one table or view into another but avoid combination duplicates- Can this be done in SQL? If so how?
[英]SQL Server How do I change my view so it doesn't produces duplicates when inserting into a table?
我有一個看法
CREATE VIEW v1 AS
SELECT [EmployeeNo.],
SUM([HoursTaken]) AS HoursTaken
FROM [dbo].[HolidayRequestForm]
GROUP BY [EmployeeNo.]
我想將此視圖的輸出放入表中。 運用
INSERT INTO [dbo].[Employees]
SELECT * FROM v1;
哪個產生
EmployeeID | HoursRequested |
------------+----------------+
1 | 8 |
2 | 16 |
3 | 8 |
我將此視圖與觸發器配合使用,因此當[dbo]。[HolidayRequestForm]更新或插入新行時,它在我的表[dbo]上產生重復的行。[雇員]
我如何只更新表[dbo]。[Employees]而又不產生重復項呢?
您正在尋找合並
根據與源表的聯接結果在目標表上執行插入,更新或刪除操作。 例如,您可以根據另一個表中的差異通過在一個表中插入,更新或刪除行來同步兩個表。
MERGE [dbo].[Employees] AS target
USING (SELECT [EmployeeNo.], HoursTaken FROM v1)
AS source ([EmployeeNo.], HoursTaken)
ON (target.EmployeeID = source.[EmployeeNo.])
WHEN MATCHED THEN
UPDATE SET HoursRequested = source.HoursTaken
WHEN NOT MATCHED THEN
INSERT (EmployeeID , HoursRequested)
VALUES (source.[EmployeeNo.], source.HoursTaken)
無論如何,在每次更新視圖時更新孔表都不是一個好主意。
試試這個查詢
MERGE EMPLOYEES E
using v1
ON E.employeeid = v1.employeeno
WHEN matched THEN
UPDATE SET E.hoursrequested = v1.hourstaken
WHEN NOT MATCHED BY TARGET THEN
INSERT (employeeid,
hoursrequested)
VALUES (v1.employeeno,
v1.hourstaken);
有關更多信息, 請訪問https://www.essentialsql.com/introduction-merge-statement/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.