Обновить таблицу с новыми данными, поступающими из CTE в SQL Server

Я работал над обновлением целых строк Persons2 (скажем) с данными, поступающими от CTE. Как проще всего выполнить это действие?

Код, который я использую ниже, я получаю некоторые данные от CTE, который использует Persons1и Persons2таблицы. После полученного результата я хочу вставить все данные (строки) в Persons2(не нужны предыдущие данные в Persons2).

Case1: если я делаю это, дубликаты данных добавляются в Persons2 (это просто вставка новых данных без выполнения удаления, команда delete не позволяет мне здесь)

Ваши решения очень ценны для меня, спасибо.

;WITH tabtemp AS 
(
    SELECT
        COALESCE(p1.id, p2.id) AS ID,
        COALESCE(p1.name, p2.name) AS Name,
        COALESCE(p1.phnumber, p2.phnumber) AS PHNumber,
        CASE 
            WHEN p1.name IS NULL THEN 0 
            ELSE 1 
        END AS IsActive
    FROM 
        Persons1 p1
    FULL JOIN 
        Persons2 p2 ON p1.name = p2.name
                    AND p1.phnumber = p2.phnumber)
INSERT INTO Persons2 (ID, Name, PHNumber, IsActive)
    SELECT * 
    FROM tabtemp

1 ответ

  1. Так что на самом деле, вам нужно добавить новые данные в P1, которые еще не в p2.
    Добавить условие Where blowed:

    ;WITH tabtemp AS (SELECT
        COALESCE(p1.id, p2.id) AS ID,
        COALESCE(p1.name, p2.name) AS Name,
        COALESCE(p1.phnumber, p2.phnumber) AS PHNumber,
        CASE WHEN p1.name IS NULL THEN 0 ELSE 1 END AS IsActive
    FROM Persons1 p1
    FULL JOIN persons2 p2
        ON p1.name = p2.name
        AND p1.phnumber = p2.phnumber)
    Insert Into Persons2(ID,Name,PHNumber,IsActive)
    SELECT * FROM tab temp
    
    where p2.id is null -- Added
    

    можно также использовать инструкцию MERGE.