我有以下功能

ALTER FUNCTION [dbo].[ActualWeightDIMS]
(
    -- Add the parameters for the function here
    @ActualWeight int,
    @Actual_Dims_Lenght int,
    @Actual_Dims_Width int,
    @Actual_Dims_Height int
)
RETURNS varchar(50)
AS
BEGIN

DECLARE @ActualWeightDIMS varchar(50);
--Actual Weight
     IF (@ActualWeight is not null) 
          SET @ActualWeightDIMS = @ActualWeight;
--Actual DIMS
     IF (@Actual_Dims_Lenght is not null) AND 
          (@Actual_Dims_Width is not null) AND (@Actual_Dims_Height is not null)
          SET @ActualWeightDIMS= @Actual_Dims_Lenght + 'x' + @Actual_Dims_Width + 'x' + @Actual_Dims_Height;


     RETURN(@ActualWeightDIMS);

END

但是当我try 使用它时,当我使用下面的select语句时,出现了以下错误"将varchar值'x'转换为数据类型int时,转换失败"

select 
 BA_Adjustment_Detail.ID_Number [ID_Number],
 BA_Adjustment_Detail.Submit_Date [Submit_Date],
 BA_Category.Category [category],
 BA_Type_Of_Request.Request [Type_Of_Request],
 dbo.ActualWeightDIMS(BA_Adjustment_Detail.ActualWeight,BA_Adjustment_Detail.Actual_Dims_Lenght,BA_Adjustment_Detail.Actual_Dims_Width,BA_Adjustment_Detail.Actual_Dims_Height) [Actual Weight/DIMS],
 BA_Adjustment_Detail.Notes [Notes],
 BA_Adjustment_Detail.UPSCustomerNo [UPSNo],
 BA_Adjustment_Detail.TrackingNo [AirbillNo],
 BA_Adjustment_Detail.StoreNo [StoreNo],
 BA_Adjustment_Detail.Download_Date [Download_Date],
 BA_Adjustment_Detail.Shipment_Date[ShipmentDate],
 BA_Adjustment_Detail.FranchiseNo [FranchiseNo],
 BA_Adjustment_Detail.CustomerNo [CustomerNo],
 BA_Adjustment_Detail.BillTo [BillTo],
 BA_Adjustment_Detail.Adjustment_Amount_Requested [Adjustment_Amount_Requested]
from BA_Adjustment_Detail
inner join BA_Category 
on BA_Category.ID = BA_Adjustment_Detail.CategoryID
inner join BA_Type_Of_Request
on BA_Type_Of_Request.ID = BA_Adjustment_Detail.TypeOfRequestID

我想做的是,如果实际重量不为空,那么返回"实际重量/尺寸"的实际重量,或者使用实际长度、宽度和高度.

如果是DIMS,那么我想将输出格式化为LenghtxWidhtxHeight(15x10x4).实际重量、Adcutal_Dims_长度、宽度和高度均为整数,但"实际重量/Dims"的输出应为varchar(50).

我哪里弄错了?

感谢

编辑:用户只能在ASP上 Select 权重或DIMS.net页面,如果用户 Select 了DIM,则必须提供长度、宽度和高度.否则它会在ASP上抛出错误.网页.我应该担心sql方面的问题吗?

推荐答案

下面是几个简短的提示:

  • 是"长度"而不是"长度"
  • 查询中的表别名可能会使其更具可读性

现在来谈谈这个问题...

在连接参数之前,需要将参数显式转换为VARCHAR.当SQL Server看到@my_int+'X'时,它认为您正在try 将数字"X"添加到@my_int,但它无法这样做.相反,试着:

SET @ActualWeightDIMS =
     CAST(@Actual_Dims_Lenght AS VARCHAR(16)) + 'x' +
     CAST(@Actual_Dims_Width  AS VARCHAR(16)) + 'x' +
     CAST(@Actual_Dims_Height  AS VARCHAR(16))

Sql相关问答推荐

带有双引号的json在Presto中是否有区别对待?

判断Pyspark生成的SQL查询

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

计算分段的总权重

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

Oracle PL/SQL:解决DBMS输出大小限制的问题

需要使用SQLite查询进行一些奇怪的时间转换

无法访问级联删除导致的触发器中已删除的外键记录

插入具有预期逻辑的查询以Forking 表

SQL OR子句如何在JOINON查询中工作?

如何在 golang squirrel lib 中添加 postgreSQL 的distinct on

在 R 值的 SQL 块中显示值

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

Postgresql:在链接表中判断相关表中插入值的条件

如何根据 SQL Server 中 1 条语句中 SELECT 的结果进行 INSERT 或 UPDATE

在where语句中使用CTE非常缓慢

Postgres更新增量之间的差异

使用 regexp_replace 替换所有出现的特殊字符

如何 Select 一列具有最小值而另一列具有给定值的记录?

如何通过存储过程将 root 的下一个子 node 作为父 node ?