使用基于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