Обновление SQL из одной таблицы в другую на основе совпадения идентификатора - PullRequest
843 голосов
/ 22 октября 2008

У меня есть база данных с account numbers и card numbers. Я сопоставляю их с файлом update любых номеров карт с номером счета, так что я работаю только с номерами счетов.

Я создал представление, связывающее таблицу с базой данных учетных записей / карточек для возврата Table ID и соответствующего номера учетной записи, и теперь мне нужно обновить те записи, в которых идентификатор совпадает с номером учетной записи.

Это таблица Sales_Import, где поле account number необходимо обновить:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

А это таблица RetrieveAccountNumber, откуда мне нужно обновить:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

Я попробовал следующее, но пока не повезло:

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID = 
                                                RetrieveAccountNumber.LeadID) 

Обновляет номера карт до номеров счетов, но номера счетов заменяются на NULL

Ответы [ 22 ]

0 голосов
/ 14 декабря 2016

Я бы хотел добавить еще одну вещь.

Не обновляйте значение с тем же значением, оно генерирует дополнительное ведение журнала и ненужные накладные расходы. См. Пример ниже - обновление будет выполняться только для 2 записей, несмотря на связь с 3.

DROP TABLE #TMP1
DROP TABLE #TMP2
CREATE TABLE #TMP1(LeadID Int,AccountNumber NVarchar(50))
CREATE TABLE #TMP2(LeadID Int,AccountNumber NVarchar(50))

INSERT INTO #TMP1 VALUES
(147,'5807811235')
,(150,'5807811326')
,(185,'7006100100007267039');

INSERT INTO #TMP2 VALUES
(147,'7006100100007266957')
,(150,'7006100100007267039')
,(185,'7006100100007267039');

UPDATE A
SET A.AccountNumber = B.AccountNumber
FROM
    #TMP1 A 
        INNER JOIN #TMP2 B
        ON
        A.LeadID = B.LeadID
WHERE
    A.AccountNumber <> B.AccountNumber  --DON'T OVERWRITE A VALUE WITH THE SAME VALUE

SELECT * FROM #TMP1
0 голосов
/ 14 ноября 2016

попробуйте это:

UPDATE
    Table_A
SET
    Table_A.AccountNumber = Table_B.AccountNumber ,
FROM
    dbo.Sales_Import AS Table_A
    INNER JOIN dbo.RetrieveAccountNumber AS Table_B
        ON Table_A.LeadID = Table_B.LeadID 
WHERE
    Table_A.LeadID = Table_B.LeadID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...