将局部变量的内容写回结果集列?
Posted
技术标签:
【中文标题】将局部变量的内容写回结果集列?【英文标题】:Writing the content of a local variable back to the resultset column? 【发布时间】:2009-02-11 07:58:25 【问题描述】:是否可以通过使用存储过程从结果集中获取整数列值到局部变量中,在那里对其进行操作,然后将其写回结果集的列?
如果是这样,语法会是什么样子?
【问题讨论】:
【参考方案1】:以下几行应该可以解决问题。
DECLARE @iSomeDataItem INT
SELECT @iSomeDataItem = TableColumName
FROM TableName
WHERE ID = ?
--Do some work on the variable
SET @iSomeDataItem = @iSomeDataItem + 21 * 2
UPDATE TableName
SET TableColumName = @iSomeDataItem
WHERE ID = ?
这种实现的缺点是它只对特定记录进行操作,但这可能是您想要实现的目标。
【讨论】:
【参考方案2】:您正在寻找的可能更像是用户定义的函数,该函数可以像任何其他内置函数一样在 SQL 中使用。
不确定这在 DB2 中是如何工作的,但对于 Oracle,它会是这样的:
Create or replace Function Decrement (pIn Integer)
return Integer
Is
Begin
return pIn - 1;
end;
您可以在 SQL 中使用它,例如
Select Decrement (43)
From Dual;
应该返回“最终答案”(42)。
希望这会有所帮助。
【讨论】:
【参考方案3】:感谢您的回复,我采取了另一种方式并在不使用程序的情况下解决了问题。核心问题是使用各种列值计算日期,列值要转换为正确的格式。通过在选择中使用大的“case - when”语句解决了这个问题。
再次感谢... :-)
【讨论】:
【参考方案4】:为什么不直接在更新语句中进行操作呢?您无需将其加载到变量中、对其进行操作然后保存。
update TableName
SET TableColumnName=TableColumnName + 42 /* or what ever manipulation you want */
WHERE ID = ?
还有,
@iSomeDataItem + 21 * 2
等同于:
@iSomeDataItem + 42
函数的想法是一个不必要的额外步骤,除非以下大部分是正确的:
1) 您将需要在许多地方使用此计算 2)计算复杂 3) 计算可以改变
【讨论】:
以上是关于将局部变量的内容写回结果集列?的主要内容,如果未能解决你的问题,请参考以下文章