Pergunta

Eu misremembered que a chave era para esta tabela Templates e, portanto, eu adicionei o campo errado como uma chave estrangeira. Agora eu preciso adicionar a chave estrangeira e quero preencher os seus valores com base neste outro campo que já está preenchida. Comecei a tentar fazer isso com uma instrução de atualização, mas eu não tenho certeza de como fazê-lo.

A parte de meu esquema:

Produtos Tabela:

ProductName (key)
TemplateName
TemplateID
...

Eu adicionei TemplateID, mas não tem dados nele ainda e é anulável.

Modelos Tabela:

TemplateID (key)
TemplateName
...

Eu quero usar a tabela de modelos para encontrar o TemplateID correspondente para cada TemplateName na tabela Produtos e preenchimento que na referência de chave estrangeira na tabela de produtos.

Posso fazer isso com uma subconsulta em Update, ou que eu preciso para escrever algum tipo de Proc? Estou usando o SQL Server 2008

Foi útil?

Solução

Você pode fazer isso com uma atualização simples consulta

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

Você não precisa especificar a tabela de produtos na cláusula FROM, nem uma cláusula de junção. Basta especificar a tabela Modelos na cláusula FROM. Você pode usar o nome da tabela que você usa na cláusula FOR UPDATE na cláusula WHERE, a recordds correlatas de ambas as tabelas.

Outras dicas

Aqui está uma solução participar. É significativo em que apenas os registros correspondentes serão atualizados.

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

Aqui está a solução subconsulta. Cada linha de produtos será atualizado, mesmo quando não houver correspondência.

Update p
Set p.TemplateId =
(
  Select t.TemplateId
  From Templates t
  Where p.TemplateName = t.TemplateName
)
From Products p
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
   on Templates.TemplateName=Products.TemplateName
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top