在临时表上执行查询时无效的表或对象(Pervasive SQL)

时间:2011-03-17 16:04:05

标签: sql pervasive-sql

我有一个SP,它将记录插入临时表,然后选择记录并返回它们。 SQL就是这个。

我通过删除INSERT INTO语句并最小化SQL来解决它。罪魁祸首是SELECT * FROM#Worklist1。不知道为什么这不起作用。我升级(刚刚)到最新版本的Pervasive服务器版本10,如果这有帮助,但这个问题是在10.3,它仍然存在。一定是遗漏了什么。

CREATE PROCEDURE "Connect_Workflow"(
     :StartDate DATETIME, :EndDate DATETIME)
     RETURNS(Patient varchar(100) , 
        AccessionNo varchar(25)  
        );
BEGIN
    CREATE TABLE #WorkFlow1
        (Patient varchar(100) null, 
        AccessionNo varchar(25) null 
    );  
    INSERT INTO #Workflow1(
      SELECT 
        rtrim(p.LastName),--+ '^' + rtrim(p.FirstName) + isnull('^' + rtrim(p.Initial), ''),
        v.VisitID   -- equiv to EncounterID
    FROM visit v
    join patient p on v.patientnumber = p.patientnumber
    WHERE v.VisitYY = '99'
    );

    SELECT * FROM #WorkFlow1;
    DROP TABLE #Workflow1;


END

更新:注释掉SELECT * FROM#Worklist1后;它仍然提供无效的表错误。如果我删除了INSERT INTO和SELECT *,那么最后错误就消失了。引用表时必须出错。

2 个答案:

答案 0 :(得分:1)

删除DROP TABLE#Workflow1;来自您的查询 我相信它会在SP返回数据之前丢弃表。

答案 1 :(得分:0)

好的,我想通了。虽然程序应该可以正常工作,但事实上Pervasive推荐这样的东西。使用SELECT INTO

CREATE PROCEDURE "Connect_Workflow"(
     :StartDate DATETIME, :EndDate DATETIME)
     RETURNS(Patient varchar(100) , 
        AccessionNo varchar(25)  
        );
BEGIN
    SELECT 
        rtrim(p.LastName),--+ '^' + rtrim(p.FirstName) + isnull('^' + rtrim(p.Initial), ''),
        v.VisitID   -- equiv to EncounterID
    FROM visit v
    INTO #Workflow1
    join patient p on v.patientnumber = p.patientnumber
    WHERE v.VisitYY = '99'
    );
    SELECT * FROM #WorkFlow1;
END