如何解决如何在nifi中执行SQL处理器中执行'NOT IN'子句
我正在尝试使用 Apache nifi 中的“Executesql”处理器执行以下查询。
INSERT INTO SampleDB VALUES (${rno},'${tno}','${tval}','${lotno}','${datval}') WHERE ${rno} NOT IN (SELECT rno FROM SampleDB);
执行时出现如下错误:
Executesql[id=01781107-63a4-1204-8110-6b19db3d5ffc] 无法执行 sql 选择查询 INSERT INTO LimsOnCloud VALUES (1,'CTG123 ','ITM123 ','123 '),'123 ','INE5 (从 SampleDB 中选择 rno);对于 StandardFlowFileRecord[uuid=93db20b2-5f9f-4521-ac42-11239abb94c2,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1615281573937-132,container=default,section=1162],offset=145 offset=1162],name=098a8ad2-0dc9-4564-a242-8b4855b619b2,size=152] 由于关键字“WHERE”附近的语法不正确。;路由失败:com.microsoft.sqlserver.jdbc.sqlServerException:关键字“WHERE”附近的语法不正确。
解决方法
-
您应该使用正确的参数化查询。
-
要使用这样的
WHERE
,您需要SELECT
。 -
您还应该明确指定要插入的列名。
-
NOT IN
在可空值面前失败了,所以用NOT EXISTS
代替。
INSERT INTO SampleDB
(rno,tno,tval,lotno,datval)
SELECT @rno,@tno,@tval,@lotno,@datval
WHERE NOT EXISTS (SELECT 1
FROM SampleDB
WHERE rno = @rno
);
,
抛出错误是因为它试图在你的表中找到一个名为 1 的列,所以不要尝试上面的方法
INSERT INTO SampleDB SELECT ${rno},'${tno}','${tval}','${lotno}','${datval}'
WHERE NOT EXISTS (SELECT 1 FROM SampleDB WHERE rno = ${rno});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。