gpt4 book ai didi

sql - 我无法使用函数从表中发送数值

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:07 25 4
gpt4 key购买 nike

Alter function calcular(@cajas int, @peso int)
RETURNS int
AS
BEGIN
set @cajas = (select cant_entr from entrega)
set @peso = (select peso_entr from entrega)

DECLARE @mercaderia int;
SELECT @mercaderia = @cajas * @peso * 0.5

RETURN @mercaderia;
END
go

SELECT
dbo.calcular(cant_entr, peso_entr), matr_veh
FROM
entrega, vehiculo
WHERE
matr_veh = 'PTK-0165'

它应该从所有行中返回一个以上的值,但我希望添加所有这些行,其中所有匹配值的车牌号都为 PTK-0165。

这就是我被问到的问题:创建一个函数来计算“路线表”中运输商品的值(value)(箱数 * 重量 *0.5),其中卡车车牌 = 'PTK-0165'

最佳答案

我会放弃标量函数并将计算放在您的查询中。该标量函数只会无缘无故地使您的查询变慢。当然,按照编码,该功能是一场灾难。

不确定您是否真的想要那个交叉连接,或者它是否应该是一个内部/外部连接,但这段代码应该接近您想要的,没有函数的所有额外麻烦。

SELECT e.cant_entr * e.peso_entr * .5 as calcular
, matr_veh
from entrega e
cross join vehiculo v
where v.matr_veh='PTK-0165'

--编辑--

由于您的教授需要一个函数,但没有提及您应该使用内联表值函数的类型。这更容易使用,并且具有不破坏查询性能的额外好处。类似的东西。

create function calcular
(
@cajas int
, @peso int
) returns table as
RETURN
select @cajas * @peso * .5 as mercarderia

go

SELECT c.mercarderia
, matr_veh
from entrega e
cross join vehiculo v
cross apply calcular(e.cant_entr, e.peso_entr) c
where v.matr_veh='PTK-0165'

--最终编辑--

既然你的老师想让你看到性能差异,那么你应该将其设为标量函数。以下是您将如何做到这一点。

Alter function calcular(@cajas int, @peso int)
RETURNS decimal(7, 2)
AS
BEGIN
DECLARE @mercaderia decimal(7, 2);
SELECT @mercaderia = @cajas * @peso * 0.5
RETURN @mercaderia;
END
go

关于sql - 我无法使用函数从表中发送数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com