【问题标题】:SQL Server using procedure to calculate column valueSQL Server 使用过程计算列值
【发布时间】:2011-10-29 21:19:49
【问题描述】:

我有一个程序可以根据其他表格中的一些值计算旅行价格。

过程如下:

create procedure CalculateTravelPrice(@ID int)
as
begin
return
(select SalaryForOneDay from Driver where driver.PersonID=@ID)+
(select SalaryForOneDay from Driver where driver.PersonID=@ID)
end

我正在尝试添加使用此过程计算值的列:

alter table RegisteredTravel
add PriceForTravel as (CalculateTravelPrice(RegTravelID))

但我收到错误提示

消息 195,第 15 级,状态 10,第 2 行
'CalculateTravelPrice' 不是可识别的内置函数名称。"

那么问题是如何正确使用程序来计算这个值?这甚至是一个好的做法还是有更好的方法?

【问题讨论】:

  • 请注意:您的 sql 中有错字吗? - 您的查询的两个部分是相同的。如果是这种情况,您最好只执行 x2 并保存读取的数据。
  • 我怀疑在这里加入会更快!

标签: sql sql-server sql-server-2008


【解决方案1】:

你应该把你的 proc 变成一个 udf(用户定义的函数)。然后,您可以将其用于计算列。我不认为 procs 可以这样使用。

【讨论】:

  • 我将程序更改为函数,但仍然出现相同的错误 - 'CalculateTravelPrice' 不是可识别的内置函数名称。我调用这个函数是错的还是什么?
  • 函数需要在调用中包含架构,因此请尝试将列定义更改为:add PriceForTravel as (dbo.CalculateTravelPrice(RegTravelID))
  • 谢谢,1 分钟前我自己想出了这个:D
  • 不用担心。不过,在选择大量行时,请注意其性能 - udfs 可能是一种计算列的缓慢方式。
  • 是的 - 每次调用它都会重新计算。这也可能对您不利,因为您的数据将随着“SalaryForOneDay”的更新而更新。我认为这是不正确的,因为您希望旅行时的费用准确无误。您可能想要考虑拥有一个适当的列,并用插入后触发器填充它。即使有视图,您也难以捕捉到旅行发生时的成本。
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多