2011-01-10 2 views
6

Я не совсем уверен, как спросить, но позвольте мне спросить примером:Передача «текущая» строки функции в SQL Server

У меня есть таблица за что я не могу изменить структуру на. Он регистрирует денежные депозиты на терминалах, подобных ATM, и имеет по одному столбцу для каждого номинала денежной ноты. Сейчас, когда мне нужна общая стоимость депозита мне нужен код так:

(rd.Count_R10 * 10) + (rd.Count_R20 * 20) + (rd.Count_R50 * 50) + (rd.Count_R100 * 100) + (rd.Count_R200 * 200) 

Я хотел бы написать функцию 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 

Тогда я назвал бы это что-то вроде:

select 
     DepositDate 
    , DepositTotal(thisRow) 
    , BatchId 
from Deposits 

ответ

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 

Затем просто выберите из DepositsWithTotal вместо Deposits

+0

+1 Просмотров было бы лучшим решением для этого. –

+0

Или реализовать то же, что и вычисленный столбец. Просмотр менее инвазивный, хотя вы не изменяете схему базовой таблицы. –

2

Это было бы полезно для модуляризировать кода, но, безусловно, не представляется возможным с функциями TSQL.

Единственный способ сделать это с помощью UDF - это передать в PK строки и получить функцию, чтобы просмотреть ее (неэффективно) или передать все значения индивидуально (громоздко).

Возможно, стоит предположить предложение для сайта Microsoft Connect, хотя я только что видел Brett's answer, и действительно, представления или вычислительные столбцы действительно предоставляют эту функцию.

1

Вы можете использовать функцию табличной функции для передачи строки функции (SQL Server 2008 и более поздних версий). Я думаю, что обычная скалярная функция будет лучшей альтернативой в вашем случае.

+0

Таблица Валидный параметр Я думаю, вы имеете в виду? Я забыл о них. –

+0

@Martin: Да, я имел в виду параметр ТВ: http://msdn.microsoft.com/en-us/library/bb510489.aspx – sqlvogel

Смежные вопросы