选择满足在存储过程中计算的条件的行

Posted

技术标签:

【中文标题】选择满足在存储过程中计算的条件的行【英文标题】:Select rows that satisfy a condition calculated in an stored procedure 【发布时间】:2017-06-07 14:43:24 【问题描述】:

我有一个存储过程,它接受一个参数并返回真或假。

我需要从表中选择存储过程为它们返回 true 的那些行。

例如,假设我的表有以下列:IdEmployeeNameAddressPhone

存储过程采用IdEmployee 并返回truefalse(如果员工已分别签订服务合同或未签订服务合同)。

最后,一旦我过滤了一组行,那些有服务合同的行,我需要再次过滤它们以获得满足其他一些条件的行,最终得到最终结果。

最好的方法是使用单个选择获得最终结果,并从该选择中为 where 子句中的每一行执行存储过程,以选择存储过程返回 true 的那些。不幸的是,这是不可能的,我无法从select(where 子句)中执行存储过程。

我无法将存储过程更改为函数,并且我不想使用游标。

我正在考虑创建一个调用存储过程的标量函数,然后在选择中使用该标量函数。

我该怎么做?有什么想法吗?

【问题讨论】:

您别无选择,只能使用循环,可能带有光标。 您可以将程序代码和您的查询添加到您的问题中吗?使用不同的方法可能可以做到这一点,但您没有提供足够的信息让我们探索它们可能是什么。 你能不能重写当前函数来输出所有签约服务的ID。然后,您可以将它们保存到表中并使用连接。 【参考方案1】:

我自己没有尝试过INSERT-EXEC,但这可能是您需要的。如果您创建一个临时表或表变量并使用 INSERT-EXEC 填充,那么您可以使用该表进行过滤。

--INSERT...EXECUTE procedure example  
INSERT INTO dbo.EmployeeSales   
EXECUTE dbo.uspGetEmployeeSales;  
GO  

【讨论】:

以上是关于选择满足在存储过程中计算的条件的行的主要内容,如果未能解决你的问题,请参考以下文章

从同一个表mysql存储过程中选择具有不同条件的多个计数

存储过程仅影响当前聚焦的行

在匹配选择条件的行之前选择 n 行

MySQL存储过程——一一检查是不是满足某些条件;如果不满足,则退出程序并返回特定消息

存储过程,并从两个几乎相同的视图中选择

SQL DB2 条件选择