将"当前"行传递给SQL Server中的函数

Pro*_*ofK 8 t-sql sql-server sql-server-2005

我不太确定如何问这个,但让我举例说:

我有一张桌子,我无法改变结构.它在ATM类终端上记录现金存款,每个货币票据面额有一列.现在,当我需要存款的总价值时,我需要这样的代码:

(rd.Count_R10 * 10) + (rd.Count_R20 * 20) + (rd.Count_R50 * 50) + (rd.Count_R100 * 100) + (rd.Count_R200 * 200)
Run Code Online (Sandbox Code Playgroud)

我想编写一个T-SQL函数,它给了我总值,但对于任何行,而不是整个查询,所以我的函数将是这样的:

CREATE FUNCTION DepositTotal
(
    @row ????
)
RETURNS money
AS
BEGIN   
    RETURN (row.Count_R10 * 10) + (row.Count_R20 * 20) + (row.Count_R50 * 50) + (row.Count_R100 * 100) + (row.Count_R200 * 200)
END
Run Code Online (Sandbox Code Playgroud)

然后我会称之为:

select
      DepositDate
    , DepositTotal(thisRow)
    , BatchId
from Deposits
Run Code Online (Sandbox Code Playgroud)

Bre*_*ett 6

解决方案必须是一个功能吗?或者是限制因素,你不能改变表的结构?您可以在表上编写一个视图,添加一个包含总值的列.

CREATE VIEW DepositsWithTotal

select
  Deposits.* -- Expand this - I just don't know your schema
, DepositTotal = (Count_R10 * 10) + (Count_R20 * 20) + (Count_R50 * 50) + (Count_R100 * 100) + (Count_R200 * 200)

from Deposits
Run Code Online (Sandbox Code Playgroud)

然后只选择DepositsWithTotal而不是Deposits