我有两个表,表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)
答案 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
子句)来限制更新的行。