Подтвердить что ты не робот

Использование оператора IF для проверки наличия временных таблиц в хранимой процедуре

Как я могу использовать оператор IF в моей хранимой процедуре, чтобы проверить, имеет ли моя временная таблица строки?

Я хочу проверить, имеет ли #TempDataTable строки, тогда я бы сделал любой из двух операторов, вставлял или обновлял в зависимости от вывода.

Я сделал следующее:

BEGIN
    SELECT * 
    INTO #TempDataTable 
    FROM
        (SELECT * 
         FROM BranchNameTable BT 
         LEFT JOIN BranchLocationActivate BLA ON BT.loc_id = BLA.loc_id 
         WHERE BT.Branchloc = 1;) as Q

    if(//TempDataTable has 0 rows)

       INSERT INTO BranchLocationActivate 
       VALUES(//my values)

    ELSE

       UPDATE BranchLocationActivate 
       SET //My values where //my values
END

Как поместить его после моего оператора select в мою процедуру?

4b9b3361

Ответ 1

Вы можете использовать not exists:

if (not exists (select 1 from #tempdataatable))

Ответ 2

Предполагая, что между SELECT * INTO #TempDataTable и if(//TempDataTable has 0 rows) не существует каких-либо SQL-операторов, вам даже не нужна таблица temp. Вместо этого вы должны просто упростить тест:

IF (NOT EXISTS(
                SELECT *
                FROM BranchNameTable BT
                LEFT JOIN BranchLocationActivate BLA
                       ON BT.loc_id = BLA.loc_id
                WHERE BT.Branchloc = 1
              )
   )
BEGIN
   INSERT INTO BranchLocationActivate VALUES(//my values)
END;
ELSE
BEGIN
   UPDATE BranchLocationActivate SET //My values where //my values
END;

Если между теми частями, которые используют таблицу temp, есть инструкции, то вы можете упростить, используя информацию, которую SQL Server уже дает вам после оператора DML с помощью переменной @@ROWCOUNT:

DECLARE @RowsInserted INT;

SELECT *
INTO #TempDataTable
FROM BranchNameTable BT
LEFT JOIN BranchLocationActivate BLA
       ON BT.loc_id = BLA.loc_id
WHERE BT.Branchloc = 1;

SET @RowsInserted = @@ROWCOUNT;

-- other statements

IF (@RowsInserted = 0)
BEGIN
   INSERT INTO BranchLocationActivate VALUES(//my values)
END;
ELSE
BEGIN
   UPDATE BranchLocationActivate SET //My values where //my values
END;

Ответ 3

Вы можете либо продолжить решение, упомянутое выше Gordon Linoff, либо если число строк может помочь/более простой способ будет ниже:

DECLARE @Count AS INT
Select @Count = count (*) from #tempdataatable

If @Count = 0 
BEGIN
    ...
ELSE
    ...
END