【发布时间】:2021-01-06 01:49:48
【问题描述】:
我有两个表(列)Employee(ID, EmployeeName, FK_DepartmentID) 和Department(ID, DepartmentName),其中我的Employee 表保存员工的数据并设置部门的外键。 Relational DBDepartment TableEmployee Table
现在在我的 VB 代码中,我有一个员工姓名文本框和一个部门组合框,用户可以从中更新员工姓名和部门。所以我想更新员工表的名称以及部门的外键,所以我使用了:
UPDATE Employee e, (SELECT d.ID FROM Department d Where d.DepartmentName = @dept) As d
SET e.FK_Department = d.ID, e.EmployeeName = @name
WHERE ((e.ID)='3') ;
这似乎工作正常。但我希望我的部门组合框是可选的。在哪里不能选择它,如果是这样,Employee 表中的FK_Department 将为 NULL。但是,如果我在没有任何 @dept 值的情况下运行查询,则查询会创建 0 个有意义的新行,因为我的 (SELECT d.ID FROM Department d Where d.DepartmentName = @dept) 什么也不返回。如何更新查询以获得结果?
我也尝试过加入但不确定在哪里申请Where d.DpartmentName = @dept,尝试过Set e.FK_Department = IIF((Select ID From Department Where DepartmentName = @dept) Is Null, Null, Department.ID),但似乎不起作用。
旁注:不确定我的问题是否是 Upsert。因为最后我还是在更新Employee Table,还是我的想法错了?
如果可能的话,您的帮助将挽救生命。提前谢谢你。
【问题讨论】:
-
这是VB还是VBA?添加适当的标签。如果没有提供部门 ID,则不要构建依赖于它的 SQL。使用条件代码构建有效的 SQL。
-
它是 VB,我需要我试图在 MS-access 中构建的查询。所以你是说查询不可能,但我必须有条件地构建查询字符串?
-
如我所说,为编程语言编辑标签。
标签: ms-access foreign-keys ado.net relational-database