sql - 如何使用存储过程的返回值设置一个值

标签 sql sql-server

我有一个存储过程 SP1,它接收参数 @param1 并用它做一些事情并返回一个值。

现在我有一个包含两列的表格,比如 C1 和 C2。最初,C1 在每一行上都有不同的值,而 C2 在每一行上都是 0。现在我想用 SP1 返回的值更新 C2,其对应的 C1 值为 @param1。我希望是这样的:

update Table1 set C2 = (exec SP1 @param1=C1)

就像在大多数编程语言中接收函数的返回值一样。

我没有学过任何 SQL,但我做了很多研究,但没有找到任何东西。因此,我们将不胜感激。

最佳答案

创建一个 OUTPUT存储过程中的参数并使用该参数存储值,然后在 Update 语句中使用该参数。像这样的……

DECLARE @OutParam Datatype;

EXECUTE SP1 @param1=C1, @OUT_Param = @OutParam OUTPUT  --<--

--Now you can use this OUTPUT parameter in your Update statement.

UPDATE Table1 
SET C2 = @OutParam

更新

阅读您的评论后,我认为这就是您尝试将 C1 列的值从表 Table1 传递到存储过程,然后使用存储过程的返回值更新表 1 的相关 C2 列。

为此,最好的方法是创建表类型参数并将 C1 的值作为表传递。 See here有关如何将表传递给存储过程的详细答案。

我还没有测试过但是在这种情况下我想你可以做这样的事情..如果你有一张大 table 我不推荐这种方法。在这种情况下,您最好使用表类型参数过程。

-- Get C1 Values In a Temp Table

SELECT DISTINCT C1 INTO #temp
FROM Table1

-- Declare Two Varibles 
--1) Return Type of Stored Procedure
--2) Datatype of C1

DECLARE @C1_Var DataType;
DECLARE @param1 DataType;

WHILE EXISTS(SELECT * FROM #temp)
BEGIN
     -- Select Top 1 C1 to @C1_Var
      SELECT TOP 1 @C1_Var = C1 FROM #temp

      --Execute Proc and returned Value in @param1
      EXECUTE SP1 @param1 = @C1_Var 

      -- Update the table
      UPDATE Table1
      SET   C2 = @param1
      WHERE C1 = @C1_Var

      -- Delete from Temp Table to entually exit the loop
      DELETE FROM  #temp WHERE C1 =  @Var    

END

关于sql - 如何使用存储过程的返回值设置一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021194/

相关文章:

sql - Firebird:如何将 id 分配给新添加的生成器中的现有行

c# - 无法将参数值从 DropDownList 转换为字符串

sql-server - 如果我所有的 sql server 数据库访问都是通过存储过程完成的

sql - 如何在 UPDATE 语句上创建一个循环,该循环一直工作到没有行可供更新为止?

sql-server - 如何从存储过程启动 SQL Server 作业?

sql-server - 德语元音变音哈希 - SQL Server 上的 SHA256

mysql - 当持久化实体之间具有一对一关系时,JPA 会出现 Hibernate 问题

java - Hibernate的mappedBy在聚合关联中,可以使用吗?

mysql - 检查mysql中的数字是否为素数

asp.net - 从 SQL 2005 Server 访问 TimeZoneInfo