Как проверить, есть ли у табличной переменной идентификатор или нет - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующая переменная таблицы

DECLARE @insertedTable Table (ServiceId INT)

Я вставляю ServiceId в него из некоторого SQL-запроса,

Теперь мне нужно вставить значения в BranchServices таблицу с перекрестным соединением @insertedTable

Я написал следующий запрос SQL

INSERT INTO BranchServices
    SELECT b.BranchId
    ,its.ServiceId
    ,CASE WHEN(SELECT MIN(SortValue) FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
     FROM @insertedTable its
    CROSS JOIN Branch b where b.IsActive = 1;

Приведенный выше запрос работает нормально, когда таблица @insertedTable не существует ServiceId, как и таблица BranchServices. Поскольку таблицы BranchServices ServiceId являются первичными ключами.

Итак, теперь мне нужно проверить, если в таблице BranchServices уже есть ServiceId, мне не нужно выполнять следующий запрос, в противном случае,Мне нужно выполнить запрос. Как я могу сделать это с помощью слияния? Если да, то как написать

INSERT INTO BranchServices
    SELECT b.BranchId
    ,its.ServiceId
    ,CASE WHEN(SELECT MIN(SortValue) FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
     FROM @insertedTable its
    CROSS JOIN Branch b where b.IsActive = 1;

1 Ответ

1 голос
/ 06 ноября 2019

В общем предположении:

INSERT INTO BranchServices (BranchId, ServiceId, OtherColumn) --Don't know what the name of the third column is
SELECT b.BranchId,
       its.ServiceId,
       CASE WHEN (SELECT MIN(SortValue)FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
FROM @insertedTable its
     CROSS JOIN Branch b
     LEFT JOIN BranchServices BS ON its.ServiceId = BS.ServiceId
WHERE b.IsActive = 1
  AND BS.ServiceId IS NULL;

Примечание, пробел действительно важен для написания читаемого кода, и я предлагаю использовать хорошо его использовать.

...