我在SQL Server 2008中编写了一个存储过程。它包含一个CURSOR,在游标的循环中,一些值被计算并使用SELECT语句发送到输出。如:
CURSOR START
SELECT OBJECT, REVENUE
CURSOR END
问题在于,当执行完成时,它返回每行的多个表。我需要获得包含所有行的单个表。有没有办法在不使用TABLE的情况下实现这一目标?
我想要这样做的主要原因是当我从PHP ODBC执行过程时,我才得到第一行。
答案 0 :(得分:4)
试试这个
DECLARE @tmp TABLE(field1 VARCHAR(50),field2 VARCHAR(50))
CURSOR START
INSERT INTO @tmp
( field1, field2 )
SELECT OBJECT, REVENUE
CURSOR END
SELECT * FROM @tmp
答案 1 :(得分:1)
Insert
将返回的值转换为临时表/表变量,然后从光标后面的select
。
答案 2 :(得分:1)
您必须使用某种表来存储临时数据。如果您不想使用“真实”数据库表,可以使用temporary table或table variable。
这些构造在过程中,对于所有意图和目的,表现得像一个表,但不是数据库中的实际表。
也就是说,使用游标逐行填充表格在T-SQL中通常是不受欢迎的,因为对于一个游标来说,游标可能是真正的性能瓶颈。试着看看你是否能以某种方式完全消除光标的使用,如果能加速并简化代码的话。