1

私は決して DBA ではなく、単純なストアド プロシージャとして認識しているものを作成しようとしています。一時テーブルを作成してデータをダンプしたいパラメータ値に応じて、0 または 1 の値を持ついくつかのパラメータを渡しています。基本的に、私のコードは次のとおりです。

ALTER PROCEDURE [dbo].[cfn_ReportP360_Calendar_MV_and_Performance]
 @IUID int = NULL
, @USERTYPE varchar(1) = 'R'
, @RepID varchar(20) = null -- this can be vchplanid or vchhhplanid depENDs ON the @reporttype
, @iWorkListID int = 0 -- this is the P360 Group id
, @Reporttype varchar(1) = 'A' -- 'A' = acct by acct, 'H' = Household
, @debug tinyint = 0 
, @showdata tinyint = 1 -- 1 = show data, 0 = show year

AS

SET NOCOUNT ON
IF OBJECT_ID('tempdb.dbo.#tempFinal') IS NOT NULL
    DROP TABLE dbo.#tempFinal


IF @showdata = 0
Begin
CREATE table dbo.#tempFinal(
    YEAR1PERF text,
    YEAR2PERF text,
    YEAR3PERF text,
    YEAR4PERF text,
    YEAR5PERF text,
    YEAR6PERF text)

    INSERT into dbo.#tempFinal
    SELECT CONVERT(VARCHAR(8), GETDATE(), 1), '12/31/2012', '12/31/2011', '12/31/2010', '12/31/2009', '12/31/2008'
END


IF @showdata = 1
BEGIN
CREATE table dbo.#tempFinal(
    HHLEVEL_INDICATOR text,
    IPPSACCOUNTID text,
    ICFNACCOUNTID text,
    VCHACCOUNTNUMBER text,
    VCHACCOUNTNAME text,
    VCHPLANID text,
    IHHID text,
    VCHHHNAME text,
    YEAR1PERF text,
    YEAR2PERF text,
    YEAR3PERF text,
    YEAR4PERF text,
    YEAR5PERF text,
    YEAR6PERF text)

    Insert into dbo.#tempFinal
    SELECT 
        HHLEVEL_INDICATOR,IPPSACCOUNTID,ICFNACCOUNTID,VCHACCOUNTNUMBER,VCHACCOUNTNAME,VCHPLANID,IHHID,VCHHHNAME,YEAR1PERF,YEAR2PERF,YEAR3PERF,YEAR4PERF,YEAR5PERF,YEAR6PERF
    from dbo.tbl_cfn_Calendar_Performance
END
SELECT * from dbo.#tempFinal


IF OBJECT_ID('tempdb.dbo.#tempFinal') IS NOT NULL
    DROP TABLE dbo.#tempFinal

それは良いことだと思いますが、実行しようとするたびに次のエラーが発生します。メッセージ 2714、レベル 16、状態 1、手順 cfn_ReportP360_Calendar_MV_and_Performance、行 47

データベースには「#tempFinal」という名前のオブジェクトが既に存在します。

47行目を除いて、その一時テーブルへの参照はまったくありません。コメントが無視され、貼り付けたコードの上にたくさんのコメントがあるためかもしれませんが、テーブルをチェックしてドロップしませんSPROCの終わりはそれを排除しますか? どこに行けばいいのかわからないので、何か助けていただければ幸いです。前もってありがとう、NickG

4

2 に答える 2

3

まず、ここでは一時テーブルを作成する必要はありません。選択ステートメントを直接実行して結果を取得できます。一時テーブルのデータに対して操作を実行しているかどうかはわかりません。そうでない場合は、必要ありません。

于 2013-09-04T15:10:55.570 に答える