T-SQLでスカラーを実行します
-
30-09-2019 - |
質問
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
関連リンク: ストアドプロシージャ:データの返却
これが役立つことを願っています! =)
所属していません StackOverflow