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