我是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的消息。
非常感谢您花时间阅读本文并提供建议。
如果我没有正确地表达这篇文章,我也会事先道歉。
答案 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