首页 > 解决方案 > 必须在 nopcommerce 4.3 中声明存储过程的标量变量错误

问题描述

我想在管理产品列表中搜索GTIN选项。因此,为此我在ProductLoadAllPaged存储过程中提供 GTIN 值。现在,当我当时从产品列表中搜索 GTIN 值时抛出数据表错误并从控制台应用程序获取System.Data.SqlClient.SqlException (0x80131904) 的消息:必须声明标量变量“@GTIN”。.

这是存储过程添加的代码,

ALTER PROCEDURE [dbo].[ProductLoadAllPaged]
(
    @GTIN nvarchar(50) = null--AWAZ
)
AS
BEGIN   
    ...........
    
    --SKU (exact match)
    IF @SearchSku = 1
    BEGIN
        SET @sql = @sql + 'OR p.[Sku] = @OriginalKeywords '
    END

    --NEW ADDED CODE FOR GTIN SEARCH
    IF @GTIN is not null
    BEGIN
        SET @sql = @sql + 'AND p.Gtin = @GTIN'
    END

    --localized product name
    SET @sql = @sql + '
    UNION
    SELECT lp.EntityId
    FROM LocalizedProperty lp with (NOLOCK)
    WHERE
        lp.LocaleKeyGroup = N''Product''
        AND lp.LanguageId = ' + ISNULL(CAST(@LanguageId AS nvarchar(max)), '0') + '
        AND ( (lp.LocaleKey = N''Name'''
        
    ..........
END

标签: sql-serverstored-proceduresnopcommercescalarsql-query-store

解决方案


在存储过程中更改这行代码:

EXEC sp_executesql @sql, N'@Keywords nvarchar(4000), @OriginalKeywords nvarchar(4000)', @Keywords, @OriginalKeywords

对此:

EXEC sp_executesql @sql, N'@Keywords nvarchar(4000), @OriginalKeywords nvarchar(4000), @GTIN nvarchar(50)', @Keywords, @OriginalKeywords, @GTIN

这将在执行动态 SQL 查询时添加您的新参数。


推荐阅读