用sql中的过程执行替换函数调用

时间:2015-03-21 16:48:06

标签: sql sql-server stored-procedures

我有一个名为dbo.Match的函数。我用inline TVF替换了一个名为dbo.Match的过程,该过程在其末尾有一个select语句,用于从表中选择行,以便当我将dbo.Match执行到名为#Temp的临时表时,我可以指示select查询的结果。

现在,如果它是一个函数,我正在使用此查询:

if @MotherFN is not null 
  begin

    SELECT @constVal = FunctionWeight 
    FROM   dbo.FunctionWeights 
    WHERE  FunctionWeights.FunctionId = 20;
    INSERT INTO #Temp2                   
(RowNumber,ValFromUser,ColumnName,ValFromFunc,FuncWeight,percentage)
  SELECT RowId, 
         @MotherFN  ,
        'mothersfirstname'
        ,PercentMatch,
         @constVal,
         PercentMatch * @constVal
  FROM   dbo.Match(@MotherFN)

    end

现在,我需要执行dbo.Match过程而不是dbo.Match函数。如何执行此执行调用并在#Temp表中插入数据,就像我在进行函数调用一样? / p>

问题: 计算PercentMatch * @constVal并有效地在同一步骤中插入#Temp。过程dbo.Match仅返回rowIdPercentMatch。我需要在#Temp中插入RowId和PercentMatch的值以及@constVal的值以及PercentMatch@constval的乘法结果的值

2 个答案:

答案 0 :(得分:2)

我会让程序接受以下参数

@MotherFN , @constVal

在过程中执行以下操作,在select语句中返回过程的结果集。

  SELECT RowId, 
         @MotherFN  ,               --<-- In proc definition 
        'mothersfirstname'
        ,PercentMatch,
         @constVal,                 --<-- In proc definition 
         PercentMatch * @constVal   --<-- In proc definition 

对于插入,只需执行

INSERT INTO #TemP (RowNumber,ValFromUser,ColumnName
                       ,ValFromFunc,FuncWeight,percentage)
Exec dbo.Match(@MotherFN , @constVal)

答案 1 :(得分:1)

您选择的程序更受限制。

您可以使用insert into ... exec ...将过程的结果插入到临时表中,但是您无法将其与其他查询完全组合。 (好吧,你可以将openrowset用于动态SQL,但这会很快变得讨厌)。

例如:

if @MotherFN is not null 
begin
    select
        @constVal = FunctionWeight 
    from
        dbo.FunctionWeights 
    where
        FunctionWeights.FunctionId = 20;

    insert into #Temp2 (
        RowId, ColumnName, ValFromFunc
    ) exec
        dbo.Match(@MotherFN);

    update
        #Temp2
    set
        ValFromUser = @MotherFN,
        FuncWeight = @constVal,
        percentage = PercentMatch * @constVal;
end;