Вопрос

Я неправильно запомнил, какой ключ был для этой таблицы шаблонов, и поэтому я добавил неправильное поле в качестве внешнего ключа. Теперь мне нужно добавить внешний ключ, и я хочу заполнить его значения на основе этого другого поля, которое уже заполнено. Я начал пытаться сделать это с помощью оператора update, но я не уверен, как это сделать.

Часть моей схемы:

Таблица продуктов:

ProductName (key)
TemplateName
TemplateID
...

Я добавил TemplateID, но в нем еще нет данных, и он может быть пустым.

Таблица шаблонов:

TemplateID (key)
TemplateName
...

Я хочу использовать таблицу Templates, чтобы найти соответствующий TemplateID для каждого TemplateName в таблице Products и заполнить его ссылкой на внешний ключ в таблице Products.

Могу ли я сделать это с помощью подзапроса в Update или мне нужно написать какой-нибудь сохраненный процесс? Я использую Sql Server 2008

Это было полезно?

Решение

Вы можете сделать это с помощью простого запроса UPDATE

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

Вам не нужно указывать таблицу Products в предложении FROM или в предложении JOIN. Просто укажите таблицу шаблонов в предложении FROM. Вы можете использовать имя таблицы, которое вы используете в предложении UPDATE в предложении WHERE, для сопоставления записей из обеих таблиц.

Другие советы

Вот решение для соединения. Важно то, что будут обновляться только совпадающие строки.

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
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
   on Templates.TemplateName=Products.TemplateName
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top