0

我记错了这个模板表的键是什么,因此我添加了错误的字段作为外键。现在我需要添加外键,并且我想根据已经填充的其他字段填充它的值。我开始尝试使用更新语句来做到这一点,但我不知道该怎么做。

我的架构的一部分:

产品表:

ProductName (key)
TemplateName
TemplateID
...

我添加了 TemplateID,但它还没有数据并且可以为空。

模板表:

TemplateID (key)
TemplateName
...

我想使用 Templates 表为 Products 表中的每个 TemplateName 找到匹配的 TemplateID,并将其填写到 Products 表中的外键引用中。

我可以使用 Update 中的子查询来执行此操作,还是需要编写某种存储过程?我正在使用 Sql Server 2008

4

3 回答 3

2

你可以用一个简单的 UPDATE 查询来做到这一点

UPDATE Products
SET Products.TemplateID = Templates.TemplateID
FROM Templates
WHERE Templates.TemplateName = Products.TemplateName

您不需要在 FROM 子句中指定 Products 表,也不需要在 JOIN 子句中指定。只需在 FROM 子句中指定 Templates 表。您可以使用在 WHERE 子句中的 UPDATE 子句中使用的表名来关联两个表中的记录。

于 2009-01-23T14:30:26.863 回答
1

这是一个加入解决方案。重要的是只有匹配的行会被更新。

Update p
Set p.TemplateId = t.TemplateId
From Products p
  join Templates t
  On p.TemplateName = t.TemplateName

这是子查询解决方案。即使没有匹配项,也会更新每一行产品。

Update p
Set p.TemplateId =
(
  Select t.TemplateId
  From Templates t
  Where p.TemplateName = t.TemplateName
)
From Products p
于 2009-01-23T14:30:28.237 回答
0
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
   on Templates.TemplateName=Products.TemplateName
于 2009-01-23T14:29:06.337 回答