从存储的Proc中选择列?

时间:2012-06-07 12:03:19

标签: sql sql-server sql-server-2008

我有一个存储过程,我正在尝试从中选择所有行。

SELECT * FROM dbo.SEL_My_Func 'arg1','arg2','ar3'

没有用。所以我也试过了:

SELECT * FROM EXEC dbo.SEL_My_Func 'arg1','arg2','ar3'

但这也没有用。如何测试我的存储过程返回正确的结果?

我必须使用proc而不是函数,因为我有一个ORDER BY作为SQL的一部分,请参阅:Selecting first row per group

最后,我认为限制从存储的probc返回哪些列没有问题,你只能指定哪些行(否则你会更好地使用SQL函数)?

3 个答案:

答案 0 :(得分:3)

您正在使用的解决方案无法正常工作:

有解决方法

SELECT a.[1], a.[2]
FROM OPENROWSET('SQLOLEDB','myserver';'sa';'mysapass',
    'exec mydatabase.dbo.sp_onetwothree') AS a

或在两个查询中拆分您的任务

Declare @tablevar table(col1,..
insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'

SELECT col1, col2 FROM @tablevar

答案 1 :(得分:1)

EXEC dbo.SEL_My_Func 'arg1','arg2','ar3'

答案 2 :(得分:0)

您对功能的假设不正确。您可以使用分区功能选择组中的第一行。

以下是查找每个客户的第一个dealer_id的示例:

select client, dealer_id
from (
     select client, dealer_guid
         , RANK() over ( partition by client order by dealer_id) as rnk
     from Dealers
) cd where rnk = 1

这也可以通过函数调用以及表(我的示例)来完成。