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并进行测试。这就是针对开发副本进行测试的目的。