我有一个返回一组行的 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/