Ошибка при выполнении хранимой процедуры в SQL SERVER 2005 - PullRequest
0 голосов
/ 11 марта 2011

Ниже приведен пример хранимой процедуры.Когда я выполняю хранимую процедуру, передавая DATE, она показывает ошибку ниже.

Неверное имя объекта '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

где ошибка?

С уважением,

jn

Ответы [ 3 ]

0 голосов
/ 11 марта 2011

Если ваш идентификатор является вашим первичным ключом, он уже равен DISTINCT, что означает, что вы можете удалить его, если ответ @ibram является причиной вашей ошибки.Я думаю, что 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 голосов
/ 11 марта 2011

Обычно вы увидите эту ошибку, если попытаетесь ссылаться на 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  
0 голосов
/ 11 марта 2011

из книг онлайн: Следующие элементы не допускаются в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...