質問

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
役に立ちましたか?

解決

.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

ただし、これは理想とはほど遠いものであり、これが機能するためにアドホックなクエリを有効にする必要があります

他のヒント

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

SQLは実際には設計されていません

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

dbo.mystoredprocedureからcolumn1として上位1のnameoffirstcolumnreturnedbyspを選択します

編集#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

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

これが役立つことを願っています! =)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top