Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server使用过程计算列值_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL Server使用过程计算列值

SQL Server使用过程计算列值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个程序,根据其他表格中的一些值计算旅行价格 程序如下所示: 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 我正在尝试添加使用以下过程计算值的列: al

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

程序如下所示:

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”不是可识别的内置函数名。“


所以问题是如何正确地使用过程来计算这个值?这是一个好的做法还是有更好的方法?

您应该将您的过程转换为udf(用户定义函数)。然后您可以将其用于计算列。我不认为procs可以这样使用。

我将过程更改为函数,但仍然存在相同的错误-“CalculateTravelPrice”不是可识别的内置函数名。我调用此函数是错误的还是什么?函数需要在其调用中包含架构,因此请尝试更改列d定义为:
将PriceForTravel添加为(dbo.CalculateTravelPrice(RegTravelID))
谢谢,一分钟前我自己就解决了这个问题:Dno不用担心。不过,当选择很多行时,请注意它的性能——UDF可能是计算列的一种缓慢方式。是的,每次调用UDF时,它都会重新计算。这也可能对您不利,因为您的数据将更新为“一天的薪水”“更新。我认为这是不正确的,因为您希望旅行时的费用是准确的。您可能需要考虑拥有一个合适的列,并用after-insert触发器填充它。即使有一个视图,您也很难像旅行发生时那样捕获成本。请注意:sql中是否有输入错误?-查询的两个部分是相同的。如果是这种情况,你最好只做x2并保存一个数据读取。我怀疑你在这里加入会更快!