1

TSQL で Sybase DB を使用しています。

私は 2 つの SPROCS の間で作業しようとしています。一方は他方の中にネストされています。

私の外側の SPROC は一時テーブルを作成し、#temp_table200 までの値で埋めます。一時テーブルに 200 のエントリが入力されると、それはJOIN.

したがって、本質的に、私の外側の SPROC は次のようになります (簡略化)。

CREATE TABLE #temp_table 
(
  ... columns ...
)

私の内部SPROCには次のものがあります:

SELECT
  SOME_COLUMNS
FROM
  SOME_TABLE
INNER JOIN
  #temp_table
ON
  SOME_CONDITION

これをテストしようとすると、内部 SPROC のスクリプトを実行すると、#temp_table存在しないというエラーが表示され、DB に SPROC を作成できません。そのため、外側の SPROC を実行しようとすると、失敗します。

この問題を解決する方法について、いくつかの指針を得ることができますか?

4

2 に答える 2

3

2 つのストアド プロシージャで実行しないでください。すべてを 1 つにまとめます。1 つのストアド プロシージャには、ジョブを完了するために必要な数の SQL ステートメントを含めることができます。一時テーブルは、それが作成されたストアド プロシージャのコンテキスト内でのみ使用できます。

CREATE PROC DoItAll
AS

   CREATE TABLE #temp_table 
   (
     ... columns ...
   );

   SELECT
     SOME_COLUMNS
   FROM
     SOME_TABLE
   INNER JOIN
     #temp_table
   ON
     SOME_CONDITION;
于 2012-08-21T18:24:52.297 に答える
1

手順を作成する前にテーブルを作成できます。

CREATE TABLE #temp_table 
(
  ... columns ...
)
go

CREATE PROC DoItAll
AS


   SELECT
     SOME_COLUMNS
   FROM
     SOME_TABLE
   INNER JOIN
     #temp_table
   ON
     SOME_CONDITION
go

私は自分の仕事で、手順間で複数のデータを送信するためによく行います。

于 2012-08-21T19:10:40.180 に答える