如果存储过程中的语句很简单

时间:2013-09-04 14:57:39

标签: sql sql-server stored-procedures parameters temp-tables

我绝不是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

2 个答案:

答案 0 :(得分:3)

首先,我认为没有必要创建临时表,您可以直接运行select语句并获得结果。我不确定你是否对临时表中的数据执行任何操作,否则你就不需要它们了。

答案 1 :(得分:1)

切换

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

IF OBJECT_ID('tempdb..dbo.#tempFinal') IS NOT NULL
相关问题