如何使用匹配列基于另一列的id更新列

时间:2013-07-31 17:20:31

标签: sql sql-server sql-server-2008

标题令人困惑所以让我解释一下,我认为我有三张桌子需要合作。

  • 第一个表名为VendorCertifications,并且有CertID, Cert, VendorID列。
  • 第二个表格为Vendors,其中包含VendorIDVendor
  • 第三个表格为VendorCert,并且有CertCompany

我所做的是将VendorCert插入VendorCertification,现在我有一个Certs列表,现在使用身份规范填写PK CertID

我想要做的是返回并使用VendorCertification VendorID更新Vendors表。

我原以为我可以使用Vendors Vendor列加入VendorCerts Company列。

然后使用CTE更新VendorCertification VendorID列。

这就是我写的:

with temptable as (
   select 
       vce.Company, v.Vendor, vce.Certification, V.VendorID
   from 
      VendorCert as VCE
   join 
      Vendors as V on V.Vendor = VCE.Company)
update VendorCertifications
set VendorID = temptable.VendorID
where temptable.Certification = Certification

这不起作用,我得到一个“无法绑定”的错误,我试图找出它为什么给我这个,但我没有运气。我甚至不确定我是否应该这样做,我想不出一种方法来使用正常的更新语句来执行它,因为它涉及(至少我认为它涉及)三个表。任何帮助表示赞赏。认证列表大约为300个,供应商列表大约有40个。

2 个答案:

答案 0 :(得分:0)

请试试这个:

with temptable (Company,Vendor,Certification,VendorID)
as(
select vce.Company,v.Vendor,vce.Certification,V.VendorID
from VendorCert as VCE
join Vendors as V
on V.Vendor=VCE.Company)

update VC 
set VC.VendorID=TT.VendorID
from VendorCertifications VC join temptable TT on VC.Certification=TT.Certification

答案 1 :(得分:0)

您已经完成了初始插入,但如果还没有,您可能已经使用OUTPUT子句返回刚刚插入的ID,因此您可以将它们用于将信息放入子表中。 JUSt添加这个,为您提供将来执行此类任务的想法。