【发布时间】:2025-12-15 21:00:02
【问题描述】:
我试图将参数作为字符串传递给存储过程,该字符串将匹配IN 语法。
我将参数定义为CHARACTER,如果我正在编写以下内容,它可以工作:
MPROMY IN ( '2','3' )
MPROMY是数据库表中的列。
我正在尝试用参数替换值:
MPROMY IN ( PRIORDAYS )
PRIORDAYS是传入的参数。
这是我的 C# 代码:
var daysIn = "'2','3'";
return CallStoredProcedure(string.Format("CALL SPORDCMP('{0}')", daysIn));
我收到以下错误:
错误 [42000] [IBM][System i Access ODBC 驱动程序][DB2 for i5/OS]SQL0104 - 令牌 1 无效。有效标记:) ,.
传递参数以使用 IN 关键字的正确语法是什么?
【问题讨论】:
-
你确认你的存储过程接受动态sql了吗?因为否则你的 in 将不起作用;你也应该用 CALL SPORDCMP({0}) 替换 CALL SPORDCMP('{0}') 因为你已经在你的“in”变量上使用了引号
-
您希望您的 IN() 子句检查两种可能性,但您只传入一个值。单个值由整个字符串
"'2','3'"组成,它有八个字符长。如果你想要两个值,你需要传递两个参数。或者,正如@jclozano 所说,您需要构建一个“动态 SQL”语句。 -
你能给我举个例子吗,我完全不清楚该怎么做。
标签: c# sql stored-procedures ibm-midrange