我有一个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 *,那么最后错误就消失了。引用表时必须出错。
答案 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