1

ストアド プロシージャがあり、そこからすべての行を選択しようとしています。

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

動作しませんでした。だから私も試しました:

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

しかし、これもうまくいきませんでした。ストアド プロシージャが正しい結果を返すことをテストするにはどうすればよいですか?

SQL の一部として ORDER BY があるため、関数ではなく proc を使用する必要がありました。参照:グループごとに最初の行を選択する

最後に、格納された probc から返される列を制限することに問題はないと考えていますか?どの行を指定することはできませんか?

4

3 に答える 3

3

使用しているソリューションは機能しません:

回避策はあります

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

または、タスクを 2 つのクエリに分割します

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 に答える