我错误地记下了这个模板表的密钥,因此我将错误的字段添加为外键。现在我需要添加外键,我想根据已经填充的其他字段填充其值。我开始尝试使用更新语句来执行此操作,但我不确定如何执行此操作。
我的架构的一部分:
产品表:
ProductName (key)
TemplateName
TemplateID
...
我添加了TemplateID,但它还没有数据,可以为空。
模板表:
TemplateID (key)
TemplateName
...
我想使用Templates表为Products表中的每个TemplateName查找匹配的TemplateID,并在Products表的外键引用中填充它。
我可以在Update中使用子查询执行此操作,还是需要编写某种存储过程?我正在使用Sql Server 2008
答案 0 :(得分:2)
您可以使用简单的UPDATE查询
来完成UPDATE Products
SET Products.TemplateID = Templates.TemplateID
FROM Templates
WHERE Templates.TemplateName = Products.TemplateName
您不需要在FROM子句中指定Products表,也不需要在JOIN子句中指定。 只需在FROM子句中指定Templates表即可。 您可以使用WHERE子句中UPDATE子句中使用的表名来关联两个表中的记录。
答案 1 :(得分: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
答案 2 :(得分:0)
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
on Templates.TemplateName=Products.TemplateName