Динамический SQL и функции - PullRequest
0 голосов
/ 08 июня 2010

есть ли способ выполнить что-то вроде следующего:

CREATE FUNCTION GetQtyFromID 
(
    @oricod varchar(15),
    @ccocod varchar(15),
    @ocmnum int,
    @oinnum int,
    @acmnum int,
    @acttip char(2),
    @unisim varchar(15)
)
AS
RETURNS DECIMAL(18,8)
BEGIN
    DECLARE @Result decimal(18,8)
    DECLARE @SQLString nvarchar(max);
    DECLARE @ParmDefinition nvarchar(max);

    --I need to execute a query stored in a cell which returns the calculated qty.
    --i.e of AcuQry: select @cant = sum(smt) from table where oricod = @oricod and ...

    SELECT     @SQLString = AcuQry
    FROM       OinActUni
    WHERE     (OriCod = @oricod) AND (ActTipCod = @acttip) AND (UniSim = @unisim) AND (AcuEst > 0)

    SET @ParmDefinition = N'
        @oricod varchar(15), 
        @ccocod varchar(15),
        @ocmnum int,
        @oinnum int,
        @acmnum int,
        @cant decimal(18,8) output';

    EXECUTE sp_executesql @SQLString, @ParmDefinition, 
            @oricod = @oricod, 
            @ccocod = @ccocod, 
            @ocmnum = @ocmnum, 
            @oinnum = @oinnum,
            @acmnum = @acmnum,
            @cant = @result OUTPUT;

    RETURN @Result

END

Проблема с этим подходом состоит в том, что запрещено выполнять sp_excutesql в функции ...

Что янужно сделать что-то вроде:

select id, getQtyFromID(id) as qty
from table

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

1 Ответ

3 голосов
/ 08 июня 2010

Как насчет использования выражения if then или case в хранимой процедуре для проверки единицы, а затем для выполнения конкретных вычислений на основе типа единицы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...