如何在存储过程中使用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语句之后?
答案 0 :(得分:29)
您可以使用not exists
:
if (not exists (select 1 from #tempdataatable))
答案 1 :(得分:3)
假设SELECT * INTO #TempDataTable
和if(//TempDataTable has 0 rows)
之间没有任何SQL语句,那么您甚至不需要临时表。相反,你应该将测试简化为:
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;
如果这些部分之间存在使用临时表的语句,那么可以通过使用SQL Server已经通过@@ROWCOUNT
变量在DML语句之后提供的信息来简化:
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;
答案 2 :(得分:1)
你可以继续上面提到的Gordon Linoff提到的解决方案,或者如果行数可能有所帮助/更简单的方法如下;
DECLARE @Count AS INT
Select @Count = count (*) from #tempdataatable
If @Count = 0
BEGIN
...
ELSE
...
END