如何在select查询中执行存储过程

28 浏览
0 Comments

如何在select查询中执行存储过程

SELECT col1,
       col2,
       col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
     FROM Tbl AS T
     WHERE (col2 = @parm) 

如何在SQL Server 2008中编写此SQL查询?

admin 更改状态以发布 2023年5月21日
0
0 Comments

在select循环内调用函数很容易,但它们不允许您运行插入、更新、删除等操作,它们只对查询操作有用。您需要一个存储过程来操作数据。

因此,这个问题的真正答案是,您必须通过“游标”迭代select语句的结果,并从该循环中调用存储过程。下面是一个示例:

DECLARE @myId int;
DECLARE @myName nvarchar(60);
DECLARE myCursor CURSOR FORWARD_ONLY FOR
    SELECT Id, Name FROM SomeTable;
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myId, @myName;
WHILE @@FETCH_STATUS = 0 BEGIN
    EXECUTE dbo.myCustomProcedure @myId, @myName;
    FETCH NEXT FROM myCursor INTO @myId, @myName;
END;
CLOSE myCursor;
DEALLOCATE myCursor;

请注意,@@FETCH_STATUS是一个标准变量,它会为您更新。这里的其余对象名称是自定义的。

0
0 Comments

感谢@twoleggedhorse。

以下是解决方案。

  1. 首先我们创建了一个函数

    CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER
    AS
    BEGIN
       DECLARE @id INTEGER
       set @id= (select TOP(1) id From tbl where col=@parm)
       RETURN @id
    END
    

  2. 然后我们执行选择查询

    Select col1, col2, col3,
    GetAIntFromStoredProc(T.col1) As col4
    From Tbl as T
    Where col2=@parm
    

0