Domanda

Ho dimenticato di ricordare quale fosse la chiave per questa tabella di modelli e quindi ho aggiunto il campo sbagliato come chiave esterna. Ora devo aggiungere la chiave esterna e voglio popolare i suoi valori in base a questo altro campo già popolato. Ho iniziato a provare a farlo con una dichiarazione di aggiornamento, ma non sono sicuro su come farlo.

Parte del mio schema:

Tabella prodotti:

ProductName (key)
TemplateName
TemplateID
...

Ho aggiunto TemplateID, ma non contiene ancora dati ed è nullable.

Tabella dei modelli:

TemplateID (key)
TemplateName
...

Voglio utilizzare la tabella Modelli per trovare il TemplateID corrispondente per ciascun TemplateName nella tabella Prodotti e riempirlo nel riferimento di chiave esterna nella tabella Prodotti.

Posso farlo con una sottoquery in Update o devo scrivere una specie di Proc memorizzato? Sto usando SQL Server 2008

È stato utile?

Soluzione

Puoi farlo con una semplice query UPDATE

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

Non è necessario specificare la tabella Products nella clausola FROM, né una clausola JOIN. Basta specificare la tabella Modelli nella clausola FROM. Puoi utilizzare il nome di tabl che usi nella clausola UPDATE della clausola WHERE, per correlare i record di entrambe le tabelle.

Altri suggerimenti

Ecco una soluzione di join. È significativo in quanto verranno aggiornate solo le righe corrispondenti.

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

Ecco la soluzione di subquery. Ogni riga di prodotti verrà aggiornata, anche in assenza di corrispondenza.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top