SQL Server 游标将值包含在选择中

标签 sql cursors

我有一个返回一组行的 SELECT 语句。

从每一行中,我需要获取一列的值并将其传递给存储过程以获取我需要为这组行本身提供的值。

例如:

DECLARE @col1 int
DECLARE @col2 int
DECLARE @col3 varchar(20)

DECLARE myCursor CURSOR FOR
SELECT col1, col2, col3
FROM table1
WHERE....

OPEN myCursor
FETCH NEXT FROM myCursor
INTO @col1, @col2

WHILE @@FETH_STATUS = 0
BEGIN
  SET @col3 = EXEC proc_GetCol3_Value @col1, @col2

  FETCH NEXT FROM myCursor
  INTO @col1, @col2
END

CLOSE myCursor
DEALLOCATE myCursor

现在,基于此,我想返回原始游标检索到的行,加上从执行的存储过程中检索到的值作为第 3 列的值。

假设 SQL 游标返回的行是:

col1  col2  col3
  1   5000
  2   5000
  3   2500
  4   2000

我需要的是在运行游标和存储过程后提供所有列,结果集应该是:

col1  col2  col3
  1   5000  APPROVED
  2   5000  REJECTED
  3   2500  CANCELLED
  4   2000  APPROVED

欢迎任何想法。谢谢。

附注我知道很多人建议简单地使用 JOIN 语句,但由于要执行的存储过程相当复杂,使用游标 SQL 语句进行连接会太复杂。

最佳答案

如果由于某种原因您无法更改为某个函数:

DECLARE @col1 int 
DECLARE @col2 int 
DECLARE @col3 varchar(20) 
DECLARE @Output (col1 int, col2 int, col3 varchar (20))

DECLARE myCursor CURSOR FOR 
    SELECT col1, col2, col3 FROM table1 WHERE....  
OPEN myCursor 
FETCH NEXT FROM myCursor INTO @col1, @col2  
WHILE @@FETH_STATUS = 0 
BEGIN   
    SET @col3 = EXEC proc_GetCol3_Value @col1, @col2

    INSERT INTO @Output (col1, col2, col3)
    VALUES @col1, @col2, @col3

FETCH NEXT FROM myCursor   INTO @col1, @col2 
END  
CLOSE myCursor 
DEALLOCATE myCursor 

SELECT col1, col2, col3 from @Output

关于SQL Server 游标将值包含在选择中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4563810/

相关文章:

php - 如何使用SQL插入不存在的东西,如果存在则删除它?

加载表单时 C# WaitCursor

user-interface - 各种 Tk 游标是什么意思?

python - 游标在 Python 的 DB-API 中是如何工作的?

mysql - 将自动递增 ID 添加到现有升序列?

mysql - 区分与求和

sql - 在 Oracle PL/SQL 中创建后执行 SELECT

MySQL游标默默地删除尾随空格

sql - 计算一列中各行之间的 Datediff(超过 2 条记录)