2011-03-11 5 views
-1

다음은 저의 샘플 저장 프로 시저입니다. DATE를 전달하여 저장 프로 시저를 실행할 때 아래 오류가 표시됩니다.SQL Server 2005에서 저장 프로 시저를 실행하는 동안 오류가 발생했습니다.

잘못된 개체 이름 'TEMPP'

- 어디 실수는 저장 프로 시저

ALTER PROCEDURE [dbo].[mystoredprocedure] 
@abc DATETIME //coming fron front-end 
AS 
BEGIN 
SET NOCOUNT ON; 

WITH TEMPP AS 
( 
SELECT DISTINCT(ID), NAME 
FROM EMPLOYEE WHERE EMPDATE > @abc 
) 
    select DP.NAME INTO xy from DEPARTMENT DP,TEMPP TE 
    where DP.ID=TE.ID ; 

SELECT * FROM xy; 
DROP xy; 
END 

입니까?

안부, 온라인 책에서

+0

가능한 중복 : http://stackoverflow.com/questions/954016/multiple-select-statements-using-sql-server-2005-with-statement – Bravax

+0

나는 그렇게 생각하지 않습니다 - CTE에만 사용됩니다 일단. – Goran

+0

Btw. select (@gbn 제안을 사용하여)를 join으로 다시 작성하면 오류가 지속됩니까? – Goran

답변

0

: 다음 항목은 재귀 멤버의 CTE_query_definition에서 허용되지 않습니다

가 DISTINCT [...]

을 선택 다음을 시도해보십시오 :

ALTER PROCEDURE [dbo].[mystoredprocedure] 
@abc DATETIME //coming fron front-end 
AS 
BEGIN 
SET NOCOUNT ON; 

    select DP.NAME from DEPARTMENT DP 
    inner join 
    (
     SELECT DISTINCT(ID), NAME 
     FROM EMPLOYEE WHERE EMPDATE > @abc 
    )TE ON DP.ID=TE.ID; 

END 
+0

OP 코드에는 재귀 멤버가 없습니다. – Goran

+0

확인. 해결 방안은 무엇인가? – sriramjitendra

0

ID가 기본 키인 경우 이미 DISTINCT입니다. 즉, @ibram 대답이 오류의 원인 인 경우 ID를 제거 할 수 있습니다. 내 생각에 xy은 임시 테이블을위한 것이므로 어떤 용도로도 사용할 수 없습니다.

ALTER PROCEDURE [dbo].[mystoredprocedure] 
    @abc DATETIME //coming fron front-end 
AS 
BEGIN 

SET NOCOUNT ON; 

WITH TEMPP AS 
( 
    SELECT ID, NAME 
    FROM EMPLOYEE WHERE EMPDATE > @abc 
) 
SELECT DP.NAME 
FROM DEPARTMENT DP 
JOIN TEMPP TE 
    ON DP.ID=TE.ID ; 

END 
0

절차에서 나중에 CTE를 참조하면이 오류가 표시됩니다. 정의 다음에 오는 명령.에 대해서만 유효합니다.

ALTER PROCEDURE [dbo].[mystoredprocedure] @abc DATETIME 
AS 
    BEGIN 
     SET NOCOUNT ON; 

     WITH TEMPP 
      AS (SELECT DISTINCT (name), 
           number 
       from master..spt_values) 
     select number 
     INTO xy 
     from TEMPP; 

     SELECT * 
     FROM xy; 

     DROP table xy; 

    SELECT * FROM TEMPP /*Not Allowed: Throws this error*/ 
    END 
관련 문제