我有一个名为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仅返回rowId
和PercentMatch
。我需要在#Temp
中插入RowId和PercentMatch的值以及@constVal
的值以及PercentMatch
和@constval
的乘法结果的值
答案 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;