1

これは可能ですか?1 つの手順でテーブルを作成しましたが、存在することはわかっています。ここで、別のプロシージャからこのテーブルを更新したいと考えています。これを実行しようとすると、「無効なオブジェクト名」エラーが発生します。テーブルが作成されたプロシージャに同じ更新コードを入れると、問題なく動作します。別の手順でこのテーブルを更新するにはどうすればよいですか?

4

2 に答える 2

1

一時テーブル以外のテーブルをストアド プロシージャに作成することはお勧めできません。

他の proc がそれを認識しない場合、2 つの可能性が考えられます。最初に一時テーブルを作成しましたが、それは新しい proc の範囲外です。

次に、2 番目の proc を実行しているユーザーにテーブルに対する権限を与えていません。

于 2013-01-09T20:45:52.060 に答える
0

一時テーブルまたはテーブル変数の場合は、元のsprocの実行が終了すると破棄されます。

RDBMSプラットフォーム(ここではMSを想定)に応じて、グローバル一時テーブル(たとえば##MyTable)を作成し、その名前を入力として2番目のsprocに渡してさらに処理することができます。

sprocを実行するたびに独自のテーブルを作成する場合は、一意の日時固有のテーブル名を生成することを検討してください。

DECLARE @Now datetime, @TableName varchar(50)

SET @TableName = 'TheTable_' + CAST(YEAR(@Now) AS varchar(4)) + CAST(MONTH(@Now) AS varchar(2)) + CAST(DAY(@Now) AS varchar(2)) + CAST(DATEPART(HOUR, @Now) AS varchar(2)) + CAST(DATEPART(MINUTE, @Now) AS varchar(2)) + CAST(DATEPART(SECOND, @Now) AS varchar(2))

代わりに、同じテーブルを永続化して再利用する場合は、テーブルが存在するかどうかを確認し、それに応じて動作することができます。

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TheTable_xxxx')
BEGIN

    ... do stuff to the existing table here, like truncate it or mark any
    ... existing records as processed somehow or whatever.

END
于 2013-01-09T20:56:21.613 に答える