2013-09-04 3 views
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

+1

처음에는 임시 테이블을 만들 필요가 없습니다. 직접 select 문을 실행하고 결과를 얻을 수 있습니다. 나는 당신이 임시 테이블에있는 데이터에 대해 어떤 연산을 수행하는지 확신하지 못한다. 그렇지 않으면 단지 필요가 없다. – Sonam

+0

절대적으로 옳았습니다. 기본적으로 결과 세트를 기본적으로 하나의 임시 테이블에 결합하려고했지만 다시 생각해 보았습니다. 조건문을 사용하면 도움이 될 것이라고 생각했기 때문에 임시 테이블을 사용할 필요가 없습니다. 고마워요! 내 게시물을 편집하거나 답변을 제출하려는 경우 기쁜 마음으로 메일을 보내주십시오! 다시 한 번 감사드립니다! –

+0

나는 대답을 제출했습니다 :) – Sonam

답변

3

첫 번째 장소에서 함께 사전에 감사합니다, 여기 당신이 직접 할 수있는, 임시 테이블을 만들기위한 모든 필요를 보지 않는다 select 문을 실행하고 결과를 얻으십시오. 나는 당신이 임시 테이블에있는 데이터에 대해 어떤 연산을 수행하는지 확신하지 못한다. 그렇지 않으면 단지 필요가 없다.

+0

다시 한번 감사드립니다! 빠르고 정확한 답변이 있습니다. –

1

스위치

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

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