在SQL SERVER 2005中执行存储过程时出错
以下是我的示例存储过程。当我通过传递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
哪里是错误的?
问候,
JN
从书本在线: 下列物品不得在递归成员的CTE_query_definition:
SELECT 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
OP代码中没有递归成员。 – Goran 2011-03-11 08:39:41
好的。解决办法是什么? – sriramjitendra 2011-03-11 11:45:57
如果您的ID是您的主键,则它已经是DISTINCT
,这意味着如果@ibram answer是您错误的原因,您可以将其删除。我认为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
通常,你会看到这个错误,如果你尝试,并在过程中稍后引用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
可能重复:http://stackoverflow.com/questions/954016/multiple-select-statements-using-sql-server-2005-with-statement – Bravax 2011-03-11 08:25:09
我不这么认为 - CTE是只用一旦。 – Goran 2011-03-11 08:27:25
顺便说一句。如果您将select(使用@gbn建议)重写入连接,错误是否仍然存在? – Goran 2011-03-11 08:29:51