2011-03-17 32 views
0

我有一個將記錄插入臨時表的SP,然後選擇記錄並返回它們。 SQL是這樣的。在臨時表上執行查詢時無效的表或對象(Pervasive 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 *,那麼最後錯誤消失了。在引用表時必須是錯誤的。

回答

1

刪除DROP TABLE#Workflow1;從您的查詢。
我相信它會在SP返回數據之前刪除表格。

+0

當我刪除DROP TABLE時,SP會觸發一次。當我再次開槍時,它抱怨表已經存在。當我在CREATE TABLE之前放置DROP TABLE時,它說'沒有這樣的表或對象'。肯定會有創建/刪除臨時表的情況。 – Rob 2011-03-17 16:26:54

+0

你在相同的連接或不同的連接中運行兩次嗎? – mirtheil 2011-03-17 16:38:48

+0

我從Pervasive Control Center運行它。我在另一個窗口中加載一個SQL文檔並鍵入exec ProcName(var1,var2)。順便說一句,我正在與DEMODATA表並獲得相同的確切問題。 – Rob 2011-03-17 16:45:53

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 
相關問題