2012-05-03 140 views
0

当我尝试以下查询时,零行受到影响。有人可以帮我解决这个问题吗?需要SQL Server查询帮助

UPDATE PLAN 
SET PLANID = (SELECT PLANID FROM MODE WHERE [NAME]='Sam') 
WHERE CUSTOMERID IN (SELECT CUSTOMERID FROM ENTITYCUSTOMER WHERE EMPID = 707) 

(SELECT PLANID FROM MODE WHERE [NAME]='Sam')将返回一个单码

(SELECT CUSTOMERID FROM ENTITYCUSTOMER WHERE EMPID = 707)可以返回多个值。

请帮助需要一个解决方案。谢谢

+1

明显的问题:当你运行SELECT CustomerId FROM EntityCustomer WHERE EmpId = 707时,你真的得到任何结果吗?如果是这样,您是否可以在“客户ID”字段中看到“计划”表中的记录? – patmortech

+1

没有错误?只有零行受到影响?这两个子查询都有结果吗? PLAN表的行是否与第二个子查询的结果相匹配? – dpp

+0

同时检查MODE表中是否只有一个Sam。 – dpp

回答

0
SELECT PLANID FROM MODE WHERE [NAME]='Sam' 

'MODE'表不能在PLANID上键入;所以它无法将特定值绑定到更新。一种选择是创建一个游标,并读取要更新的正确值。另一种方法是用你使用的任何客户端代码语言来执行此操作(大概是.net语言的语法?)

+0

如果它没有返回任何值,它会将PLANID设置为null,或者如果PlanID不允许空值,则会出现错误。无论哪种方式,该子查询都不会影响更新语句影响的行数。 – patmortech

+0

正确,但不能用(可能的)多个值更新单个列。 – dwerner

+0

他在帖子中说,它只返回了一个值。如果它试图返回多个记录,你会得到一个错误。 – patmortech