这应该是愚蠢的回答,但对于我的生活,我无法找到一个明确的答案。
你能用“?”在postgres中,就像在其他数据库引擎中一样?
例如:
SELECT * FROM MyTable WHERE MyField = ?
我知道我可以使用$ n语法,例如psql的工作原理:
CREATE TABLE dummy (id SERIAL PRIMARY KEY, value INT);
PREPARE bar(int) AS INSERT INTO dummy (value) VALUES ($1);
EXECUTE bar(10);
SELECT * FROM DUMMY;
但是如果我尝试使用“?”来准备声明,例如
PREPARE bar(int) AS INSERT INTO dummy (value) VALUES (?);
我明白了:
错误:语法错误在或附近“)” 第1行:PREPARE bar(int)AS INSERT INTO dummy(value)VALUES(?);
...然而,在各个地方,我读到“postgres支持?语法”。
这里发生了什么? postgres支持使用?而不是1美元,2美元等 如果是这样,你如何使用它?
具体来说,这让我的生活变得痛苦,将一堆现有的sql server查询移植到postgres,如果我可以避免必须重写所有where条件所有sql语句那么非常,非常好。
答案 0 :(得分:3)
PostgreSQL中的SQL级PREPARE
不支持?
占位符,它使用$1
... $n
样式。
大多数客户端库支持参数化查询中该语言使用的标准占位符,例如PgJDBC使用?
占位符。
如果您通过nPgSQL,psqlODBC,PgJDBC,psycopg2等客户端库发送查询,那么您应该能够使用该语言和客户端的常用占位符。