1

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

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 函数)?

4

3 回答 3

3

您使用的解决方案 qwill 不起作用:

有解决方法

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
于 2012-06-07T12:06:27.333 回答
1
EXEC dbo.SEL_My_Func 'arg1','arg2','ar3'
于 2012-06-07T12:05:02.863 回答
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

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

于 2012-06-07T13:56:23.970 回答