在SQL Server存储过程中将varchar值“%”转换为int数据类型时,转换失败

qxgroojn  于 2023-01-25  发布在  SQL Server
关注(0)|答案(1)|浏览(175)

我正在处理一个SQL Server存储过程。我有一个包含这些列的表

BusName(NVarchar(100) not null)
BusNumber(int, null)

在我的主Bus表中。
我正在尝试实现搜索功能,用户可以通过BusNameBusNumber来获取存储在主Bus表中的所有结果
我实现了这个存储过程来处理搜索功能:

CREATE PROCEDURE [dbo].[spGetAllBus]
    @BusName VARCHAR(512),
    @BusNo INT
AS
    SET NOCOUNT ON;  
BEGIN
     SELECT 
         [BusName], 
         [ManagingOwner],
         [Operator],
         [CurrentService], [CurrentRate],
         [BusNumber],
         [MarketRate],
         [EarliestRdel]
     FROM 
         [dbo].[Bus] 
     WHERE 
         [BusName] LIKE '%' + @BusName + '%' 
         OR [BusNumber] LIKE '%' + @BusNo + '%' 
END

当我像这样执行这个存储过程时:

DECLARE @return_value int

EXEC    @return_value = [dbo].[spGetAllBus]
        @BusName = N'emma',
        @BusNo = NULL
SELECT  'Return Value' = @return_value

我收到错误
将varchar值" %"转换为int数据类型时转换失败。
我正在努力寻找根本原因,因为我没有在代码中进行任何转换。有人能帮助我吗?任何帮助都将不胜感激。谢谢

bxgwgixi

bxgwgixi1#

如果BusNumber列的类型是INT,则可以如下所示修改存储过程。

ALTER PROCEDURE [dbo].[spGetAllBus]
   @BusName VARCHAR(512),
   @BusNo INT
AS
   SET NOCOUNT ON;  
BEGIN
 SELECT 
     [BusName], 
     [ManagingOwner],
     [Operator],
     [CurrentService], [CurrentRate],
     [BusNumber],
     [MarketRate],
     [EarliestRdel]
 FROM 
     [dbo].[Bus] 
 WHERE 
     [BusName] LIKE '%' + @BusName + '%' 
     OR [BusNumber] = @BusNo 
END

相关问题