1

这应该是愚蠢的简单回答,但对于我的生活,我无法找到一个明确的答案。

你能用“吗?” 在 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 行:准备 bar(int)AS INSERT INTO dummy(值)VALUES(?);

...然而,在不同的地方我读到“postgres 支持 ? 语法”。

这里发生了什么?postgres 支持使用吗而不是 1 美元、2 美元等。如果是这样,你如何使用它?

具体来说,将一堆现有的 sql server 查询移植到 postgres 让我的生活变得很痛苦,如果我可以避免重写所有 where 条件和所有 sql 语句,那将非常非常好。

4

1 回答 1

3

PostgreSQL 中的SQL 级别PREPARE不支持?占位符,它使用$1...$n样式。

大多数客户端库支持该语言在参数化查询中使用的标准占位符,例如 PgJDBC 使用?占位符。

如果您通过 nPgSQL、psqlODBC、PgJDBC、psycopg2 等客户端库发送查询,那么您应该能够使用该语言和客户端的常用占位符。

于 2013-04-10T03:07:13.413 回答