选择满足在存储过程中计算的条件的行
Posted
技术标签:
【中文标题】选择满足在存储过程中计算的条件的行【英文标题】:Select rows that satisfy a condition calculated in an stored procedure 【发布时间】:2017-06-07 14:43:24 【问题描述】:我有一个存储过程,它接受一个参数并返回真或假。
我需要从表中选择存储过程为它们返回 true 的那些行。
例如,假设我的表有以下列:IdEmployee
、Name
、Address
和 Phone
存储过程采用IdEmployee
并返回true
或false
(如果员工已分别签订服务合同或未签订服务合同)。
最后,一旦我过滤了一组行,那些有服务合同的行,我需要再次过滤它们以获得满足其他一些条件的行,最终得到最终结果。
最好的方法是使用单个选择获得最终结果,并从该选择中为 where 子句中的每一行执行存储过程,以选择存储过程返回 true 的那些。不幸的是,这是不可能的,我无法从select
(where 子句)中执行存储过程。
我无法将存储过程更改为函数,并且我不想使用游标。
我正在考虑创建一个调用存储过程的标量函数,然后在选择中使用该标量函数。
我该怎么做?有什么想法吗?
【问题讨论】:
您别无选择,只能使用循环,可能带有光标。 您可以将程序代码和您的查询添加到您的问题中吗?使用不同的方法可能可以做到这一点,但您没有提供足够的信息让我们探索它们可能是什么。 你能不能重写当前函数来输出所有签约服务的ID。然后,您可以将它们保存到表中并使用连接。 【参考方案1】:我自己没有尝试过INSERT-EXEC,但这可能是您需要的。如果您创建一个临时表或表变量并使用 INSERT-EXEC 填充,那么您可以使用该表进行过滤。
--INSERT...EXECUTE procedure example
INSERT INTO dbo.EmployeeSales
EXECUTE dbo.uspGetEmployeeSales;
GO
【讨论】:
以上是关于选择满足在存储过程中计算的条件的行的主要内容,如果未能解决你的问题,请参考以下文章