使用SQL Server 2016中涉及的第三个表更新查询

时间:2017-03-31 16:24:16

标签: sql-server sql-update

我是SQL编码的新手,我还在学习一些错综复杂的东西。 我已经研究过,找不到与我正在尝试的相关的例子(也许我错过了正确的关键词)。

我在SQL Server 2016中有三个表(一个员工表 - E1,一个带有员工数据的导入表 - ED1和一个部门表--D1)......这个问题的相关结构是:

DB1中的E1包含列

U_SysID - Identity,  
UserID - VARCHAR,  
FirstName - VARCHAR,  
LastName - VARCHAR,  
DepartmentID - VARCHAR 

DB2中的ED1与dbo模式包含列

UserID - VARCHAR,   
FirstName - VARCHAR,  
LastName - VARCHAR,  
DepartmentName - VARCHAR

DB1中的D1包含列

DepartmentID - Identity and  
DepartmentName - VARCHAR 

我想出的代码是:

USE DB1
GO

UPDATE E1 
SET DepartmentID = (SELECT DepartmentID 
                    FROM D1
                    WHERE E1.UserID IN (SELECT UserID 
                                        FROM DB2.dbo.ED1) 
                      AND D1.DepartmentName IN (SELECT DepartmentName 
                                                FROM ED1) 
                      AND E1.UserID = DB2.dbo.ED1.UserID)

我的问题是最后一行。 “DB2.dbo.ED1.UserID”生成多部分标识符无法绑定消息。没有拼写错误,并且在上面的select语句中使用该数据库引用没有问题,但如果我删除最后一行,则会收到子查询返回的值超过1的消息。

非常感谢您花时间阅读本文并提供建议。

如果我没有正确地表达这篇文章,我也会事先道歉。

1 个答案:

答案 0 :(得分:1)

这将满足您的需求。但是,您还应检查丢失或拼写错误的DepartmentNames,Missing Users等。




  USE DB1
 GO

 UPDATE E1& #xA; SET DepartmentID = D1.DepartmentID
 FROM E1
 INNER JOIN DB2.dbo.ED1 ED1
 ON E1.UserID = ED1.UserID
 INNER JOIN D1
 ON ED1.DepartmentName = D1.DepartmentName