sql-server - 必须在 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
解决方案
在存储过程中更改这行代码:
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 查询时添加您的新参数。
推荐阅读
- flutter - url 启动器插件不起作用的原因可能是什么?
- javascript - 即使表中有数据,制表器 table.getRow() 也会返回 false
- android - 在Android设备中测试统一游戏会一直停止它(Unity3D)?
- python - 尽管使用与其他用户类似的结构,Tkinter GUI 仍会自动关闭
- azure-devops - Azure DevOps 可以关闭 YAML 管道创建体验吗?
- javascript - 允许用户移动不等于函数中声明的值的项目
- mysql - brew mysql 已安装,但我在 mac 上被拒绝访问
- ffmpeg - ffmpeg - 如何同时捕获和旋转视频?
- c# - 如何用属性名称中的空格反序列化 JSON?
- .net-core - 更改机器人主页的 default.htm?