Sql 转换nvarchar值时转换失败';abc&x27;在nopcommerce 4.3中设置数据类型int

Sql 转换nvarchar值时转换失败';abc&x27;在nopcommerce 4.3中设置数据类型int,sql,sql-server,stored-procedures,nopcommerce,sqlexception,Sql,Sql Server,Stored Procedures,Nopcommerce,Sqlexception,我想在管理产品列表中搜索GTIN选项。因此,我在ProductLoadAllPaged存储过程中提供GTIN值。现在,当我从产品列表中搜索GTIN值时,抛出datatable错误,并从控制台应用程序中获取消息 System.Data.SqlClient.SqlException(0x80131904):将nvarchar值“abc”转换为数据类型int时转换失败。 这是存储过程添加的代码 ALTER PROCEDURE [dbo].[ProductLoadAllPaged] ( @GTI

我想在管理产品列表中搜索GTIN选项。因此,我在ProductLoadAllPaged存储过程中提供GTIN值。现在,当我从产品列表中搜索GTIN值时,抛出datatable错误,并从控制台应用程序中获取消息

System.Data.SqlClient.SqlException(0x80131904):将nvarchar值“abc”转换为数据类型int时转换失败。

这是存储过程添加的代码

ALTER PROCEDURE [dbo].[ProductLoadAllPaged]
(
    @GTIN nvarchar(50) --AWAZ
)
AS
BEGIN
    .....
    
    --filter by vendor
    IF @VendorId > 0
    BEGIN
        SET @sql = @sql + '
        AND p.VendorId = ' + CAST(@VendorId AS nvarchar(max))
    END
    
    --AWAZ
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + '
        AND p.Gtin = ' +  @GTIN             
    END

    --filter by warehouse
    IF @WarehouseId > 0
    BEGIN
        --we should also ensure that 'ManageInventoryMethodId' is set to 'ManageStock' (1)
        --but we skip it in order to prevent hard-coded values (e.g. 1) and for better performance
        SET @sql = @sql + '
        AND  
            (
                (p.UseMultipleWarehouses = 0 AND
                    p.WarehouseId = ' + CAST(@WarehouseId AS nvarchar(max)) + ')
                OR
                (p.UseMultipleWarehouses > 0 AND
                    EXISTS (SELECT 1 FROM ProductWarehouseInventory [pwi]
                    WHERE [pwi].WarehouseId = ' + CAST(@WarehouseId AS nvarchar(max)) + ' AND [pwi].ProductId = p.Id))
            )'
    END
    
    .....
END

看来你需要修改这部分代码:

   --AWAZ
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + '
        AND p.Gtin like ''%' + @GTIN + '%'''            
    END

看来你需要修改这部分代码:

   --AWAZ
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + '
        AND p.Gtin like ''%' + @GTIN + '%'''            
    END

您需要在引号中加上@GTIN,将其视为字符更改
和p.GTIN='+@GTIN
to和p.GTIN='+@GTIN+''''''''.'您知道值“abc”存储在哪个列或参数中吗?检查“VendorID”是否大于0,稍后检查“WarehouseID”是否大于0。要进行此比较,SQL需要将“VendorID”/“WarehouseID”转换为数据类型整数。IMHO,过程的其余部分似乎不会导致此错误。@GTIN“abc”中的MathiasFogel是store。否则,我显示的与vendorid和warehouseid没有任何联系,因为您可以知道,在vendorid和warehouseid之间,我添加了代码。@eshirvana我使用了您的代码,它的过滤功能也显示了空数据,而数据是有的。@s.k.Soni您确定吗?,我猜你需要像一样使用
,你需要在引号中加上@GTIN,将其视为字符更改
和p.GTIN='+@GTIN
to和p.GTIN='+@GTIN+'',你知道值“abc”存储在哪个列或参数中吗?检查“VendorID”是否大于0,稍后检查“WarehouseID”是否大于0。要进行此比较,SQL需要将“VendorID”/“WarehouseID”转换为数据类型整数。IMHO,过程的其余部分似乎不会导致此错误。@GTIN“abc”中的MathiasFogel是store。否则,与vendorid和warehouseid没有关联,我会显示出来,因为你可以知道,在vendorid和warehouseid之间,我添加了代码。@eshirvana我使用了你的代码,它的过滤功能也会显示空数据,而数据是有的。@s.k.Soni你确定吗?我猜你需要使用
完美。非常感谢您的帮助。:)你很完美。非常感谢您的帮助。:)不客气