使用select语句更新临时表中的值

时间:2015-01-25 00:08:26

标签: sql sql-server ssms

Insert into #Temp(Rownumber, Percentage) 
select RowNumber, 
       (MatchFirstName.PercentMatch * FunctionWeights.FunctionWeight)
from dbo.MatchFirstName(@FirstName), dbo.FunctionWeights
where FunctionWeights.FunctionName = 'MatchFirstName'

FunctionWeights表中,我有weights列和FunctionName列,用于存储不同的函数名称。

dbo.MatchFirstName(@FirstName)是这里的TVF。现在,我有一个名为FunctionWeights的表,它存储与这些函数名对应的常量值。

在将值插入Temp列中的Percentage表之前,我希望它检索与select语句所具有的函数名对应的常量值,并将其乘以从中检索的百分比值功能。我怎么能这样做?

使用上述查询,不会在Temp表的百分比列中检索乘法值,而只会从TVF中检索PercentageMatch值。

快照: 功能重量表

This is FunctionWeights table

在插入

后从#Temp中选择*

This is result of select * from #Temp

百分比列应该有100乘以FunctionWeights.FunctionWeight的值。但相反,它在所有列中都有100个。

2 个答案:

答案 0 :(得分:0)

MatchFirstoName的FunctionWeight是1,所以乘以它并没有任何区别。如果MatchFirstName在PercentMatch中返回100,那么所有行都将为100。

如果你有select的固定函数名,你可以在select之前将FunctionWeight提取到变量中。

答案 1 :(得分:0)

您可能应该为您的TVF添加别名并使用它来访问该列,因为from子句中对TVF的引用包含其中的参数,而Select子句中的参数不包括。

Insert into #Temp(Rownumber, Percentage) 
select RowNumber, 
       (T.PercentMatch * FunctionWeights.FunctionWeight)
from dbo.MatchFirstName(@FirstName) T, dbo.FunctionWeights
where FunctionWeights.FunctionName = 'MatchFirstName'