Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 选择满足存储过程中计算的条件的行_Sql Server 2008_Tsql_Stored Procedures_User Defined Functions - Fatal编程技术网

Sql server 2008 选择满足存储过程中计算的条件的行

Sql server 2008 选择满足存储过程中计算的条件的行,sql-server-2008,tsql,stored-procedures,user-defined-functions,Sql Server 2008,Tsql,Stored Procedures,User Defined Functions,我有一个存储过程,它接受一个参数并返回true或false 我需要从表中选择存储过程为其返回true的行 例如,假设我的表有以下列:IdEmployee、Name、Address和Phone 存储过程接受ideemployee,并返回true或false,前提是员工是否分别签订了服务合同 最后,一旦我得到一组经过筛选的行,那些有服务合约的行,我需要再次筛选它们,以获得那些满足其他一些条件的行,从而最终得到最终结果 最好是使用单个select获得最终结果,然后从该select中,对where子句中

我有一个存储过程,它接受一个参数并返回true或false

我需要从表中选择存储过程为其返回true的行

例如,假设我的表有以下列:
IdEmployee
Name
Address
Phone

存储过程接受
ideemployee
,并返回
true
false
,前提是员工是否分别签订了服务合同

最后,一旦我得到一组经过筛选的行,那些有服务合约的行,我需要再次筛选它们,以获得那些满足其他一些条件的行,从而最终得到最终结果

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

我不能将存储过程更改为函数,也不想使用游标

我想创建一个标量函数来调用存储过程,然后在select中使用标量函数

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

我自己也没试过,但可能正是你需要的。如果创建临时表或表变量并填充INSERT-EXEC,则可以使用该表进行筛选

--INSERT...EXECUTE procedure example  
INSERT INTO dbo.EmployeeSales   
EXECUTE dbo.uspGetEmployeeSales;  
GO  
我自己也没试过,但这可能是你需要的。如果创建临时表或表变量并填充INSERT-EXEC,则可以使用该表进行筛选

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

你别无选择,只能使用一个循环,可能带有一个光标。你能把过程代码和你的查询添加到你的问题中吗?这可能是使用不同的方法实现的,但是您没有提供足够的信息让我们了解它们可能是什么。您是否可以重写当前函数以输出服务的所有ID。然后,您可以将它们保存到一个表中,只使用联接。除了使用循环(可能带有光标)之外,您别无选择。您可以将过程代码和查询添加到问题中吗?这可能是使用不同的方法实现的,但是您没有提供足够的信息让我们了解它们可能是什么。您是否可以重写当前函数以输出服务的所有ID。然后,您可以将它们保存到表中,只需使用联接即可。