使用基于Count的IF ELSE语句来执行不同的Insert语句

当我通过数据库进行search时,如果发现某个特定的项目不存在,则运行INSERT语句,如果find一个或多个此项目,则运行另一个INSERT语句。

我不完全确定如何使用IF ELSEexpression式。

我到目前为止是一个声明,将计数目标数据出现的次数; 如果大于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] ) 

根据您的需求,这里有几种方法:

 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 

IF存在

 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') 

只要你需要基于Count大于0来find它,最好使用这样的EXISTS:

 IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data') BEGIN -- TRUE Procedure END ELSE BEGIN -- FALSE Procedure END 

一个显而易见的解决scheme是运行2个单独的查询,首先selectcount = 1的所有项目并运行插入,然后selectcount> 1的项目并运行第二个插入。

作为第二步如果两个插入是相似的,你可以将它们组合成一个查询。

另一种可能是使用游标来循环你的logging集,并为每一行做你需要的任何逻辑。

不太清楚你的意思

"I cant find any examples to help me understand how I can use this to run 2 different statements:"

。 它是否像使用SWITCH一样使用CASE

 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 

如果这是在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分配给一个variables,然后使用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 

有很多种方式来编码,但这是一种可能的方法。 我假设MS SQL

我们将开始获取行数(另一个快速示例 ),然后做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评论的启发):

忘记整个variables的创build/分配 – 查找“EXISTS” – MSDN Docs 2 。

 IF EXISTS ({SELECT Query}) BEGIN {INSERT Version 1} END ELSE BEGIN {INSERT version 2} END