3

T-SQLでスカラーを実行するのと同等のことを行うための最良の方法は何ですか?つまり、SQLを使用して、ストアドプロシージャを呼び出すときに、最初の結果セットの最初の行の最初の列を取得するにはどうすればよいですか?

編集: 明確にするために、これはSQLのみを使用しており、クライアント側の言語は使用していません。結果セットは次のようになります。

Id Description
--------------
1  foo
2  bar

変数に「1」だけが必要です。

これを行う方法を私が知っている唯一の方法は、一時テーブルを使用することです(テストされていませんが、あなたはアイデアを得ることができます):

INSERT #TempTable EXEC MyStoredProcedure

DECLARE @id INT;

SELECT TOP(1) @id = Id FROM #TempTable
4

3 に答える 3

1

一時テーブルソリューションがおそらく唯一のオプションです。

SQLは実際にはこのために設計されていません

于 2010-11-09T19:41:22.847 に答える
0

.netクライアントについて話している場合は、SQLCommand.ExecuteScalarを使用できます。

そうでない場合は、これがあなたのケースに正確にどのように見えるかの例を追加してください。

編集:あなたは追加情報を提供したのでこれを行うことができます:

-- add 'loopback' linkedserver 
if exists (select * from master..sysservers where srvname = 'loopback')
 exec sp_dropserver 'loopback'
go
exec sp_addlinkedserver @server = N'loopback',
 @srvproduct = N'',
 @provider = N'SQLOLEDB', 
 @datasrc = @@servername
go

select top 1 * @id = id 
from openquery(loopback, 'exec MyStoredProcedure') 
go

ただし、これは理想からはほど遠いです。さらに、これを機能させるには、アドホッククエリを有効にする必要があります。

于 2010-11-09T19:30:54.597 に答える
0

これは、あなたが求めていることから、私が考えることができる唯一の方法です。=)

dbo.MyStoredProcedureからColumn1としてTOP1nameOfFirstColumnReturnedBySPを選択します

編集#1

-- Assuming this temporary table represents the data structure returned by the SP.
CREATE TABLE @Data (
    Column1 int
    , Column2 nvarchar(10)
)

insert into @Data
    exec dbo.MyStoredProcudure

select TOP 1 Column1
    from @Data

関連リンク:ストアドプロシージャ:データを返す

これがお役に立てば幸いです。=)

于 2010-11-09T19:34:16.047 に答える