我有SQL以下简写格式的DB2结合:DB2参数字面比较
Select ...
From ...
Where ... ((COL1 IS NULL) And ('' = ?)) ...
Order By ...
这个SQL的粗糙的目的是返回空记录,如果对COL1输入是空白。
但是,如果我尝试将“RED”绑定到占位符,则会出现CLI0109E错误,指示“字符串数据右截断”。我相信发生的事情是DB2已经决定SQL中的'literal'是一个长度为0的列,因此试图比较长度为3的绑定参数(在'RED'的情况下)会导致截断错误。这是有道理的。
如果我将SQL更改为:((COL1 IS NULL) And ('{10 spaces}' = ?))
,它工作正常。
如果我将SQL更改为:((COL1 IS NULL) And (CAST('' AS VARCHAR(32767)) = ?))
,它工作正常。
是否有驱动程序设置或我缺少的SQLBindParameters设置导致DB2将“'解释为零长度列?
我通过Oracle和SQLServer运行相同的SQL,它们工作正常,它告诉我他们将“'解释为不同的东西,并且可能默认将SQL中的所有文字视为VARCHAR(32767)或其他东西。
感谢您的任何帮助。