当我在我的数据库中搜索时,如果我发现某个特定项目不存在,我会运行一个INSERT语句,如果找到一个或多个此项目,我会运行一个不同的INSERT语句。
我不完全确定如何使用IF ELSE表达式。
到目前为止,我所说的是一份声明,它将计算目标数据出现的次数;如果它大于0,它将打印为TRUE,否则,它将打印为FALSE。我找不到任何示例来帮助我理解如何使用它来运行两个不同的INSERT语句。
这是我到目前为止所做的:
SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
)
答案 0 :(得分:93)
根据您的需要,有以下两种方式:
IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE')
--INSERT SOMETHING
ELSE
--INSERT SOMETHING ELSE
或者更长一点
DECLARE @retVal int
SELECT @retVal = COUNT(*)
FROM TABLE
WHERE COLUMN = 'Some Value'
IF (@retVal > 0)
BEGIN
--INSERT SOMETHING
END
ELSE
BEGIN
--INSERT SOMETHING ELSE
END
答案 1 :(得分:6)
只要你需要根据Count大于0来找到它,最好使用这样的EXISTS:
IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data')
BEGIN
-- TRUE Procedure
END
ELSE BEGIN
-- FALSE Procedure
END
答案 2 :(得分:3)
如果存在
IF exists (select * from table_1 where col1 = 'value')
BEGIN
-- one or more
insert into table_1 (col1) values ('valueB')
END
ELSE
-- zero
insert into table_1 (col1) values ('value')
答案 3 :(得分:2)
不清楚你的意思
"I cant find any examples to help me understand how I can use this to run 2 different statements:"
。是否使用CASE
就像你追求的SWITCH
一样?
select case when totalCount >= 0 and totalCount < 11 then '0-10'
when tatalCount > 10 and totalCount < 101 then '10-100'
else '>100' end as newColumn
from (
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) A
答案 4 :(得分:1)
一个明显的解决方案是运行2个单独的查询,首先选择count = 1的所有项并运行插入,然后选择count> 1的项并运行第二个插入。
作为第二步,如果两个插入相似,则可以将它们组合成一个查询。
另一种可能性是使用游标循环到你的记录集,并为每一行做你需要的任何逻辑。
答案 5 :(得分:1)
有许多方法可以对此进行编码,但这是一种可行的方法。我假设MS SQL
我们首先获取行数(另一个Quick Example),然后执行if / else
-- Let's get our row count and assign it to a var that will be used
-- in our if stmt
DECLARE @HasExistingRows int -- I'm assuming it can fit into an int
SELECT @HasExistingRows = Count(*)
ELSE 0 -- false
FROM
INCIDENTS
WHERE {Your Criteria}
GROUP BY {Required Grouping}
现在我们可以进行If / Else Logic MSDN Docs
-- IF / Else / Begin / END Syntax
IF @HasExistingRows = 0 -- No Existing Rows
BEGIN
{Insert Logic for No Existing Rows}
END
ELSE -- existing rows are found
BEGIN
{Insert logic for existing rows}
END
另一种更快的方式(灵感来自Mahmoud Gamal的评论):
忘记整个变量的创建/分配 - 查找“EXISTS” - MSDN Docs 2。
IF EXISTS ({SELECT Query})
BEGIN
{INSERT Version 1}
END
ELSE
BEGIN
{INSERT version 2}
END
答案 6 :(得分:0)
如果这是在SQL Server中,则语法正确;但是,您需要从嵌套查询中引用COUNT(*)作为总计数。这应该可以满足您的需求:
SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
使用它,您可以将TotalCount分配给变量,然后使用IF ELSE语句来执行INSERT语句:
DECLARE @TotalCount int
SELECT @TotalCount = TotalCount FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
IF @TotalCount > 0
-- INSERT STATEMENT 1 GOES HERE
ELSE
-- INSERT STATEMENT 2 GOES HERE
答案 7 :(得分:0)
只需使用以下内容:
IF(((表中的SELECT count(*))= 0) 开始
....
END