我正在从表中检索以下 sql 语句,然后使用绑定变量替换其中的值。运行该语句时出现语法错误。它似乎是由于 lower() 函数而发生的,但是我相信我正确使用了它。我已经尝试通过 psql 手动运行该语句,并且它适用于我提供的值。有人对此有任何想法吗?我曾尝试将 ' 换成 $$ 但这没有效果。
陈述
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower(':1')
and column_name=lower(':2')
具有替换值的预期基本语句
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower('MyTableName')
and column_name=lower('MyColumnName')
由 postgresql 运行的语句
SELECT column_name
FROM information_schema.columns
WHERE table_name=lower('((E'RWOL_TMA_ROADWORKS'))')
and column_name=lower('((E'TPHS_CWAY_RESTRICT_TYPE'))')
C#中的错误
ERROR: 42601: syntax error at or near \"MyTableName\"
PostgreSQL 日志文件中的错误
2012-04-16 11:36:15 BST ERROR: syntax error at or near "RWOL_TMA_ROADWORKS" at character 80
2012-04-16 11:36:15 BST STATEMENT: SELECT column_name FROM information_schema.columns WHERE table_name=lower('((E'RWOL_TMA_ROADWORKS'))') and column_name=lower('((E'TPHS_CWAY_RESTRICT_TYPE'))')
编辑:检索和实现代码是用 C# 编写的。我使用数据库连接基类和 npgsql 提供程序工厂来建立连接、运行查询和检索数据。此方法适用于使用此方法绑定变量等的所有其他查询,除了我尝试使用 lower() 函数的查询。
编辑:我尝试完全删除引号以让绑定代理处理引用值,这提供了相同的语法错误。
编辑:现在已启用日志记录并添加了 postgresql 正在运行的实际语句。