10

SELECT Val from storedp_ValueSQL Server Management Studio のクエリ エディター内で、これは可能ですか?

アップデート

一時テーブルを作成しようとしましたが、うまくいかなかったので、ここで質問しました。

CREATE TABLE #Result
(
batchno_seq_no int
)
INSERT #Result EXEC storedp_UPDATEBATCH
SELECT * from #Result
DROP TABLE #Result
RETURN

ストアド プロシージャ UpdateBatch

delete from batchno_seq;
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq

何が間違っているのですか?クエリウィンドウから呼び出すにはどうすればよいですか?

更新 #2

わかりました、これ、方向性などについて助けていただければ幸いです-これが私が達成しようとしていることです。

 select batchno_seq from (delete from batchno_seq;insert into batchno_seq default values;
 select *  from batchno_seq) BATCHNO 
 INTO TEMP_DW_EKSTICKER_CLASSIC

これは、より大きな select ステートメントの一部です。どんな助けでも大歓迎です。Oracle に移行したため、基本的にこの SQL は壊れています。

4

6 に答える 6

14

うーん、ダメ。ストアド プロシージャから選択するには、次の操作を実行できます。

declare @t table (
    -- columns that are returned here
);

insert into @t(<column list here>)
    exec('storedp_Value');

ストアド プロシージャからの結果をこのように使用していて、ストアド プロシージャを作成した場合は、コードをビューまたはユーザー定義関数に変更することを真剣に検討してください。多くの場合、そのようなコードは、より単純で適切な構造に置き換えることができます。

于 2013-07-17T10:51:46.020 に答える
5

これはSQLサーバーでは不可能です。結果を一時テーブルに挿入してから、さらにクエリを実行できます

CREATE TABLE #temp ( /* columns */ )

INSERT INTO #temp ( /* columns */ )
EXEC sp_MyStoredProc

SELECT * FROM #temp
WHERE 1=1

DROP TABLE #temp

または、使用できますOPENQUERYが、これにはリンクサーバーをセットアップする必要があります.SQLは

SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>')
于 2013-07-17T10:54:37.303 に答える
2

ここで見つけることができる SQL Server のストアド プロシージャ間でデータを共有するためのすべての可能な方法に関する最高の記事 (私の意見では): http://www.sommarskog.se/share_data.html

于 2014-04-30T15:27:21.923 に答える
0

これを試して

「戻る」を変更

delete from batchno_seq;   
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq

選ぶ'

delete from batchno_seq;   
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
SELECT @batchno_seq
于 2013-07-17T11:52:29.533 に答える
0

私は何かが欠けているに違いありません。

ストアド プロシージャは結果セットを返さず、代わりにストアド プロシージャの RETURN 機能を使用して整数を返すため、単純にどのテーブルにも INSERT できません (返される結果セットがないため)。

しかし、(これがセットではなく反復的に行われると仮定して)単純に戻り値をローカル変数に格納し、その変数の値を必要なテーブルに挿入することができます。

ただし、SSMS のクエリ ウィンドウの結果で値を返したいだけの場合は、INSERT と SELECTING を実行するのはやり過ぎです。これで十分であるように思えます(クエリウィンドウで):

DECLARE @RetVal INT = 0;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
EXEC @RetVal = storedp_UPDATEBATCH;
COMMIT TRANSACTION;
SELECT @RetVal;
  --OR
  --PRINT @RetVal;

これがベースからかけ離れている場合は、"batchno_seq" の DDL を提供してください。

乾杯!

于 2015-01-21T23:23:02.797 に答える