一時テーブルを作成するストアドプロシージャを呼び出すトランザクションがあります。ストアドプロシージャが実行された後で、この一時テーブルにアクセスできるようにする必要があります。注:私がやろうとしていることについては、私はグローバルな一時テーブルを使用することはできません。ストアドプロシージャ内でストアドプロシージャ内に作成された、同じトランザクション内のプロシージャ外の
例:ここでは
は、ストアドプロシージャの例です。ここで
CREATE PROCEDURE [dbo].[GetChangeID]()
AS
BEGIN
IF OBJECT_ID('tempdb..#CurrentChangeID') IS NOT NULL
DROP TABLE #CurrentChangeID
SELECT '00000000-0000-0000-0000-000000000000' AS ChangeID INTO @CurrentChangeID
END
GO
は、トランザクションの例です。
BEGIN TRANSACTION
DECLARE @changeID uniqueidentifier
EXEC dbo.GetChangeID
DECLARE @test uniqueidentifier
SET @test = (SELECT ChangeID FROM #CurrentChangeID)
COMMIT TRANSACTION
GO
問題は、それがテーブルを見つけることができないということです#CurrentChangeIDという名前です。
## CurrentChangeIDのようなグローバルな一時テーブルとして宣言せずにこのテーブルを参照できる場所にするにはどうすればよいですか?
------ ------ UPDATE
だからそれはちょうど簡単な例だったので、私は私の質問に多くのコンテキストを与えてみましょう。だから、私が最終的にやろうとしていることは次のとおりです。1.トランザクションの開始2. GUIDを生成するストアドプロシージャの呼び出し3.その後、トリガーを持つビューの行を更新します。 4.そのトリガー内で、sp内で生成されたGUIDを取得します。 5.コミットする。
:次にどこにchangeIDにアクセスしたいと思い、このトランザクション内で、あなただけの次のクエリを使用する必要が
:
は、ストアド・プロシージャの変更しますprocが完了するとprocは自動的に削除されます。 –お返事ありがとうございます。それが私が恐れていたものです。それで、それは単なる単純な例だったので、私の質問にもっと文脈を与えましょう。だから私が最終的にやってみようとしているのは次のとおりです。 1.トランザクションの開始 2. GUIDを生成するストアドプロシージャを呼び出します 3.トリガーを持つビュー内の行を更新します。 4.そのトリガー内で、sp内で生成されたGUIDを取得します。 5.コミットします。 それは意味がありますか? –