如何用存储过程将查询结果插入统计表?问题排查求助
解决存储过程统计插入结果不正确的问题
首先,咱们先揪出你当前存储过程的核心问题:你的SELECT count(Variable1)...语句没有添加过滤条件,它统计的是SurveyData表中所有非NULL的Variable1和Variable2的总行数(也就是3行),而不是你需要的“值为4或5”的目标数量。这就是插入到Upper_Values的数据不符合预期的根本原因。
另外你提到“返回的结果集为空”,如果是指执行存储过程后Upper_Values表中没有数据,那可能是执行时SurveyData表无数据、或者账号没有插入权限,但结合你的测试数据来看,优先解决统计逻辑的问题才是关键。
修正后的存储过程
我们需要用SUM(CASE WHEN ...)来精准统计符合条件的记录数,代码如下:
GO CREATE PROCEDURE Put_Values AS BEGIN SET NOCOUNT ON INSERT INTO Upper_Values(Var1Count, Var2Count) SELECT SUM(CASE WHEN Variable1 IN (4,5) THEN 1 ELSE 0 END) AS Var1Count, SUM(CASE WHEN Variable2 IN (4,5) THEN 1 ELSE 0 END) AS Var2Count FROM SurveyData END
逻辑解释
CASE WHEN Variable1 IN (4,5) THEN 1 ELSE 0 END:逐行判断Variable1是否为4或5,符合条件返回1,否则返回0SUM()把这些1和0累加起来,就能得到符合条件的总数量,这种方式比COUNT()更适合带条件的统计场景
测试验证
用你提供的测试数据:
| ID | Variable1 | Variable2 |
|---|---|---|
| 1 | 3 | 4 |
| 2 | 2 | 4 |
| 3 | 5 | 1 |
执行修正后的存储过程后,Upper_Values表会插入一行完全符合你预期的数据:
| ID | Var1Count | Var2Count |
|---|---|---|
| 1 | 1 | 2 |
如果执行后Upper_Values仍无数据,你可以排查这几点:
SurveyData表是否真的存在测试数据- 当前执行存储过程的账号是否拥有
Upper_Values表的插入权限 Upper_Values表的ID列是否设置为自增列(如果不是,需要手动指定ID值,或者修改表结构设为自增)
内容的提问来源于stack exchange,提问作者ruedi
相关产品推荐
相关产品推荐

