插入/更新/删除每一行SQL
我在表1中有以下数据插入/更新/删除每一行SQL,sql,stored-procedures,store,Sql,Stored Procedures,Store,我在表1中有以下数据 SessionID S1 S2 S3 我在另一个表2中有以下数据 EmployeeID | Session 1 | NULL 2 | NULL 3 | NULL 我想做的是更新/插入每一行 范例 预期结果: 表2 任何见解都会有所帮助 谢谢。听起来您希望表2中的每一行与表1中的每一行的每一个组合都有一行。如果是的话 BEGIN TRAN SELECT * INTO #temp FROM TABLE2 DELETE
SessionID
S1
S2
S3
我在另一个表2中有以下数据
EmployeeID | Session
1 | NULL
2 | NULL
3 | NULL
我想做的是更新/插入每一行
范例
预期结果:
表2
任何见解都会有所帮助
谢谢。听起来您希望表2中的每一行与表1中的每一行的每一个组合都有一行。如果是的话
BEGIN TRAN
SELECT * INTO #temp FROM TABLE2
DELETE TABLE2
INSERT TABLE2
(
EmployeeID,
Session
)
SELECT
temp.EmployeeID,
TABLE1.SessionID
FROM TABLE1 CROSS JOIN #temp temp
DROP #TEMP
COMMIT TRAN
听起来,对于表2中当前的每一行和表1中的每一行的每一个组合,您都希望在表2中有一行。如果是的话
BEGIN TRAN
SELECT * INTO #temp FROM TABLE2
DELETE TABLE2
INSERT TABLE2
(
EmployeeID,
Session
)
SELECT
temp.EmployeeID,
TABLE1.SessionID
FROM TABLE1 CROSS JOIN #temp temp
DROP #TEMP
COMMIT TRAN
我建议创建一个单独的Employee表。要将数据插入员工会话(表2):
我建议创建一个单独的Employee表。要将数据插入员工会话(表2):
我认为
MERGE
语句有助于:
MERGE INTO TABLE2 t2
USING (SELECT t2.EmployeeID, t1.SessionID
FROM TABLE2 t2
CROSS JOIN TABLE1 t1) t
ON t2.EmployeeID = t.EmployeeID AND t2.Session = t.SessionID
WHEN NOT MATCHED BY TARGET THEN
INSERT (EmployeeID, Session) VALUES(t.EmployeeID, t.SessionID)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
;
我认为
MERGE
语句有助于:
MERGE INTO TABLE2 t2
USING (SELECT t2.EmployeeID, t1.SessionID
FROM TABLE2 t2
CROSS JOIN TABLE1 t1) t
ON t2.EmployeeID = t.EmployeeID AND t2.Session = t.SessionID
WHEN NOT MATCHED BY TARGET THEN
INSERT (EmployeeID, Session) VALUES(t.EmployeeID, t.SessionID)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
;
谢谢,但我认为丹尼尔的答案更适合我的情况谢谢,但我认为丹尼尔的答案更适合我的情况嗨,丹尼尔,你的方法很有效。但我面临着主要的关键问题。在表2中,我的employeeid是主键。因此我尝试将session和employee id作为候选键,但失败了,因为我的表2会话为null。有什么建议吗?如果
EmployeeID
必须是TABLE2
的主键,那么您就不能做您想做的事情,因为它需要该列中的重复值。如果您可以删除当前密钥并将其替换为覆盖EmployeeID
和Session
的新复合密钥,则只要相同EmployeeID
没有重复的Session
值,该密钥就可以工作。每个EmployeeID
可以有一个空值,但不能超过这个值。嗨,丹尼尔,你的方法很有效。但我面临着主要的关键问题。在表2中,我的employeeid是主键。因此我尝试将session和employee id作为候选键,但失败了,因为我的表2会话为null。有什么建议吗?如果EmployeeID
必须是TABLE2
的主键,那么您就不能做您想做的事情,因为它需要该列中的重复值。如果您可以删除当前密钥并将其替换为覆盖EmployeeID
和Session
的新复合密钥,则只要相同EmployeeID
没有重复的Session
值,该密钥就可以工作。每个EmployeeID
可以有一个空值,但最多只能有一个空值。
MERGE INTO TABLE2 t2
USING (SELECT t2.EmployeeID, t1.SessionID
FROM TABLE2 t2
CROSS JOIN TABLE1 t1) t
ON t2.EmployeeID = t.EmployeeID AND t2.Session = t.SessionID
WHEN NOT MATCHED BY TARGET THEN
INSERT (EmployeeID, Session) VALUES(t.EmployeeID, t.SessionID)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
;