2016-09-21 85 views
1

我有一个查询使用的主键和外键关系更新列中的所有行,但错误的是:更新列中的所有表中的行从另一个表的使用主键和外键

Msg 512,Level 16,State 1,Line 1

子查询返回的值超过1。当 子查询遵循=,!=,<,< =,>,> =或当子查询用作 表达式时,这是不允许的。该语句已终止。

我的查询是:

Update T_OP 
    Set DOCID = (Select DocID from T_Reg_Patients) 
where Fk_RegID = (Select Pk_RegID from T_Reg_Patients) 

Table1

Pk_RegID Name DocID 
1   Sam  1 
2   Sam2  2 
3   Sam3  3 
4   Sam4  4 

Table 2

Pk_OPID Fk_RegID Name DOCID 
1   1   Sam NULL 
2   2   Sam2 NULL 
3   3   Sam3 NULL 
4   4   Sam4 NULL 

我不得不从表1更新DOCID如果Fk_RegId(在表2)与Pk_RegID(In表1)...

请帮帮我。谢谢!

+1

你说table1和table2,但查询有T_OP和Reg_Patients ...坚持同名!同时向我们展示更新后的预期表格数据。 – jarlh

+0

谢谢你为我的邮件加入为我工作.... – Raviteja

回答

0

使用下面的查询。

UPDATE t 
SET t.DOCID=p.DOCID 
FROM T_OP t 
    JOIN T_Reg_Patients p ON p.Pk_RegID=t.Fk_RegID 
0
Update t2 
set t2.docid=t1.DocID 
from 
T_Reg_Patients t1 join t_op t2 on 
t2.Fk_RegID=t1.Pk_RegID 
1

使用JOIN代替:

Update T_OP 
    Set docid = rp.DocID 
    from t_op o JOIN 
     T_Reg_Patients rp 
     on o.Fk_RegID = rp.Pk_RegID; 

然而,有可能是不需要存储DocID两表所示。为什么不在需要取值时使用JOIN

0
UPDATE table 
SET t.DOCID=p.DOCID 
FROM T_OP t 
    JOIN T_Reg_Patients p ON p.Pk_RegID=t.Fk_RegID 
相关问题