Ответ 1
Вы можете использовать not exists
:
if (not exists (select 1 from #tempdataatable))
Как я могу использовать оператор 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 в мою процедуру?
Вы можете использовать not exists
:
if (not exists (select 1 from #tempdataatable))
Предполагая, что между 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;
Вы можете либо продолжить решение, упомянутое выше Gordon Linoff, либо если число строк может помочь/более простой способ будет ниже:
DECLARE @Count AS INT
Select @Count = count (*) from #tempdataatable
If @Count = 0
BEGIN
...
ELSE
...
END