从非唯一标识符将列信息从一个表导入另一个表

时间:2015-03-23 09:35:43

标签: sql sql-server import merge dml

我有两个表,表A包含我想传递的信息,表B我想接受这些信息。 (19列varchar)。

他们共同拥有的唯一一栏是" ItemTitle" (不要问,我没有创建它)所以我试图基于ItemTitle匹配进行导入。我的问题在表A中,ItemTitle是唯一的,但在表B中可以有许多具有相同名称的。

我想将列信息导入到包含相同ItemTitle的所有行,而不仅仅是它找到的第一个。

有可能这样做吗?

这是我尝试的:(我只使用1列的集合来查看它是否有效) 它没有。错误消息4104,级别16,状态1,行29 多部分标识符" prodData.ItemTitle"无法受约束。

SELECT prodData.[prodID]
      ,prodData.[Item]
      ,prodData.[ParentItem]
      ,prodData.[ItemTitle]
      ,prodData.[15]
      ,prodData.[16]
      ,prodData.[17]
      ,prodData.[18]
      ,prodData.[19]
      ,prodData.[20]
      ,prodData.[21]
      ,prodData.[22]
      ,prodData.[23]
      ,prodData.[24]
      ,prodData.[25]
      ,prodData.[26]
      ,prodData.[27]
      ,prodData.[28]
      ,prodData.[29]
      ,prodData.[30]
      ,prodData.[31]
      ,prodData.[32]
      ,prodData.[33]
    From [database].[dbo].[tbl_ProductInfoDump] as prodData
    Inner Join [database].[dbo].[tbl_ProductFilterDump] as filterData 
    on filterData.ItemTitle = prodData.ItemTitle


Update [database].[dbo].[tbl_ProductInfoDump] set [15] = (Select [15] from [database].[dbo].[tbl_ProductFilterDump] as filterData where filterData.ItemTitle = prodData.ItemTitle)

1 个答案:

答案 0 :(得分:0)

您必须使用加入更新,或者从select更新(无论您想要命名)。

我们的想法是将目标表(B)与原始表(A)连接起来,并为B的每一行更新连接A行中列的值。

你可以在这里找到一个好的解释:SQL SERVER – UPDATE From SELECT Statement – Using JOIN in UPDATE Statement – Multiple Tables in Update Statement。查询如下所示:

UPDATE B
SET
   Col1 = A.Col1,
   Col2 = A.Col2
FROM B
INNER JOIN A ON A.Title = B.Title

当然,您可以包含其他过滤器(where子句)来限制更新的行。