Pregunta

No recuerdo cuál era la clave para esta tabla de Plantillas y, por lo tanto, agregué el campo incorrecto como clave externa. Ahora necesito agregar la clave externa y quiero llenar sus valores en función de este otro campo que ya está poblado. Empecé a intentar hacer esto con una declaración de actualización, pero no estoy seguro de cómo hacerlo.

Parte de mi esquema:

Tabla de productos:

ProductName (key)
TemplateName
TemplateID
...

He agregado TemplateID, pero todavía no tiene datos y es anulable.

Tabla de plantillas:

TemplateID (key)
TemplateName
...

Quiero usar la tabla de Plantillas para encontrar el TemplateID correspondiente para cada TemplateName en la tabla de Productos y completarlo en la referencia de clave externa en la tabla de Productos.

¿Puedo hacer esto con una subconsulta en Actualización, o necesito escribir algún tipo de Proceso almacenado? Estoy usando Sql Server 2008

¿Fue útil?

Solución

Puede hacerlo con una simple consulta de ACTUALIZACIÓN

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

No necesita especificar la tabla Productos en la cláusula FROM, ni una cláusula JOIN. Simplemente especifique la tabla de plantillas en la cláusula FROM. Puede usar el nombre de la tabla que usa en la cláusula UPDATE en la cláusula WHERE, para correlacionar los registros de ambas tablas.

Otros consejos

Aquí hay una solución de unión. Es significativo porque solo se actualizarán las filas coincidentes.

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

Aquí está la solución de subconsulta. Cada fila de productos se actualizará, incluso cuando no haya coincidencias.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top