如何在select查询中执行存储过程
如何在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日
在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
是一个标准变量,它会为您更新。这里的其余对象名称是自定义的。
感谢@twoleggedhorse。
以下是解决方案。
-
首先我们创建了一个函数
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
-
然后我们执行选择查询
Select col1, col2, col3, GetAIntFromStoredProc(T.col1) As col4 From Tbl as T Where col2=@parm