2014-07-25 3 views
0

나는 다음과 같은 코드가 저장 프로 시저의 다른 실행에 다음과 같은 메시지를잘못된 개체 이름 '#volume'

잘못된 개체 이름 #Volume

을 얻고있다. twoBD 열 값이 < 48 인 경우는 열 twoBD 값에 열 TAT.And에서 만난 표시됩니다있는 아래

0시 20분,

0시 40분

Create PROCEDURE [dbo].[gsktat] 
(  
@startdate datetime, 
@enddate datetime 

) 
AS 
BEGIN 

    SET ANSI_WARNINGS OFF 

    create table #volume (Sdate datetime,edate datetime ,vstatus varchar(50) 
          ,twoBD varchar(50),TAT varchar(50),ageing int) 

    insert into #volume(Sdate,edate,vstatus,twoBD) 
     (select [Start date],[End date],[Status],dbo.[GetWorkingMinss]([Start date],[End date],'ss') from GSK) 
    Declare @claimid int 
    set @claimid = '48' 
    If Exists (Select * from #volume where 
     (SELECT 
     RIGHT('00'+CONVERT(VARCHAR(10),(((cast(STR(Floor(REPLACE(twoBD,':','.')),8,0)as int)*60+CAST(Right(00.45,2) as int)))%3600)/60),2) 
     +':' 
     + RIGHT('00'+CONVERT(VARCHAR(10), ((cast(STR(Floor(REPLACE(twoBD,':','.')),8,0)as int)*60+CAST(Right(00.45,2) as int)))%60),2) AS [ TAT] 
     )<= @claimid) 
    begin 
     insert into #volume(TAT)values('Met') 
    end 
    else 
    begin 
     insert into #volume(TAT)values('Not Met') 
     select * from #volume 
    end       

end 

답변

1

처럼 온다 당신이 만약 #volume이라는 임시 테이블을 먼저 만들어야합니다. 그것이 일시적이기 때문에 그것을 사용할 때마다해야합니다.

나머지 코드는 표시하지 않으므로 해결 방법을 알려줄 방법이 없습니다.

당신이 지금

가 실제로 테이블에 문제가 없는지 확신 할 수 없다, 코드에 문제가 표시되지 않습니다 시저 코드를 게시 추가 등 사용자의 GetWorkingMins는()하지만 표시되지 않습니다 그것들은 누락 된 #volume 메시지를 일으킬 것입니다.

하지만 이상한 것을 봅니다. 오류 메시지가 "잘못된 개체 이름 #Volume"이지만 SQL 서버가 변경되지 않는다고 확신합니다. ##Volume 오류 메시지가 표시됨 - 로컬로 (2005) 시도했지만 실행되지 않았습니다. . 당신이 실제로 호출하는이 proc의 다른 버전을 가지고 있지 않다면 궁금하게 생각합니다. SQL 카탈로그 역시 혼란 스러울 수 있습니다. 그래서 이것은 드문 문제입니다 만 문제를 일으키는 코드가 아닐 수도 있습니다. proc 상단에 인쇄 또는 다른 방법을 추가하여 호출하는 내용이 호출중인 내용과 동일한 지 확인하십시오.

또 다른 가능성은 메시지가 이상하게 만드는 내부 저장된 proc에서 나올 수 있다는 것입니다. gskstat()에서 #volume을 #myvolume으로 변경하고 오류 메시지가 변경되는지 확인하십시오.

provol 위쪽에 #volume을 작성하면 디버깅하기에 좋습니다. 이 경우 수명이 꽤 잘 정의되어 있으므로 proc이 끝나면 #volume이 사라집니다. 호출하는 proc 또는 클라이언트 연결에서도 #volume을 생성하더라도 gskstat()로 인해 문제가 발생하지 않아야합니다 (sql은 두 번째 # tablename 접미어가있는 숨겨진 tablename 접미사를 사용합니다)