Выполните итерацию по всем строкам, указав self в качестве внешнего ключа, если условие встречается в SQL Server - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь написать оператор T-SQL для добавления внешнего ключа к себе, если условие выполнено.

Вот моя неудачная попытка:

UPDATE Profile
SET fk_id = CASE 
               WHEN parent_code = code THEN id
               ELSE NULL 
            END
FROM Profile

Код выполняетсяно результат не тот, который я ожидал.

Вот мой стол:

Table Profile as P 
{
    id int
    code varchar
    parent_code varchar
    name varchar
    fk_id int #the foreign key field
}

1 Ответ

2 голосов
/ 08 октября 2019

Использовать объединение обновлений:

UPDATE Profile p1
SET p1.fk_id = p2.id
FROM Profile p1
INNER JOIN Profile p2
    ON p1.parent_code = p2.code;

Идея состоит в том, чтобы попытаться привести каждую запись профиля в соответствие с ее родителем, если она существует, благодаря тому, что parent_code соответствует обычной записи другой записи. code. Если будет выполнено сопоставление с самостоятельным соединением, мы затем вытягиваем родительский элемент id в поле fk_id дочерней записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...