Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用过程输出更新列_Sql Server - Fatal编程技术网

Sql server 使用过程输出更新列

Sql server 使用过程输出更新列,sql-server,Sql Server,我有一张如下所示的表格- Table1 Col1 Col2 Col3 1 a NULL 2 b NULL 3 c NULL 我有一个程序usp_calculateResult(Col1,Col2) 现在我想用过程usp_calculateResult的输出更新Col3。 例如,如果我想用Col1的值更新Col3,那么我们将执行:updatetable1 SE

我有一张如下所示的表格-

           Table1
   Col1     Col2    Col3
    1         a     NULL
    2         b     NULL
    3         c     NULL
我有一个程序usp_calculateResult(Col1,Col2)

现在我想用过程usp_calculateResult的输出更新Col3。 例如,如果我想用Col1的值更新Col3,那么我们将执行:updatetable1 SET Col3=Col1。 我需要用过程输出替换Col1

我正在使用SQLServer2005。请帮忙

注:usp_calculateResult有两个输入参数和一个输出参数。由于安全问题,我无法发布程序

[编辑:添加]


根据下面的讨论,我想我必须做一个与程序相同的函数。我看不到任何其他选择。有人能对此发表评论吗?

根据您的上下文,proc只返回一个值,您应该将proc重新格式化为用户定义的函数。然后,您应该使用它创建一个计算/计算列,如下所示(示例中给出的简单公式可以直接替换为您的函数)info here和here


这种方法将在2005年、2008年和2012年起作用

您真的需要为每一行执行sp吗?。听起来您可以使用计算列来代替。你不能混淆你的sp并告诉我们它的功能吗?这样我们就可以为此制定一个基于集合的解决方案,而不是使用
输出
参数,然后必须将该参数保存回表中的
Col3
,为什么存储过程不能只为
Col3
设置值呢?如果您将SP重新定义为函数,您可以像
UPDATE Table1 set Col3=usp_calculateResult(Col1,Col2)
那样调用它,但我同意这可能会变得过于昂贵。在我的实际环境中,此过程仅在少数其他过程中使用。所以我真的不能修改它。此外,其中的查询太复杂。所以我不能像更新Table1 set cast(Col3=cast(Col1为varchar(10))+Col2为varchar(30)),其中Col3为null。我们不能真正生成comuted列。除了生成被破坏的列或将过程转换为函数之外,还有其他选择吗?看起来您没有访问原始代码的权限?在这种情况下,答案是否定的。如果不是这样,则提取代码,创建udl,并在使用代码的地方,将其替换为udf并进行测试。这就是针对开发副本进行测试的目的。