使用参数时在“=@”处或附近出现语法错误
syntax error at or near "=@" when using parameters
我正在尝试 update/insert 数据到 postgresql,这取决于给定的 id 是否已经在 table 中预设。
这适用于更新
UPDATE table SET
column=@Column
WHERE id=@Id;
这也适用(硬编码值)
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=123) THEN
UPDATE table SET
column=123
WHERE id=123;
ELSE
INSERT INTO table(id,column) VALUES (123,123);
END IF;
END
$$
但是,一旦我尝试将值作为参数给出,它就会中断,并在“=@”处或附近出现错误语法错误
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=@Id) THEN
UPDATE table SET
column=@Column
WHERE id=@Id;
ELSE
INSERT INTO table(id,column) VALUES (@Id,@Column);
END IF;
END
$$
为了隔离问题,只留下一个参数,就像这样
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=@Id) THEN
UPDATE table SET
column=123
WHERE id=123;
ELSE
INSERT INTO table(id,column) VALUES (123,123);
END IF;
END
$$
给出的错误是 Npgsql.PostgresException:'42703:列 "id" 不存在'。那么我对参数有什么魔力吗?
Npgsql 不支持美元引号字符串文字 ($$) 中的参数。
但是,您似乎正在实施 upsert(更新或插入)- PostgreSQL 通过 INSERT ... ON CONFLICT
语法原生支持它。请参阅 this tutorial 或有关此功能的其他文档,这应该可以避免您尝试执行的操作的复杂性。
我正在尝试 update/insert 数据到 postgresql,这取决于给定的 id 是否已经在 table 中预设。
这适用于更新
UPDATE table SET
column=@Column
WHERE id=@Id;
这也适用(硬编码值)
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=123) THEN
UPDATE table SET
column=123
WHERE id=123;
ELSE
INSERT INTO table(id,column) VALUES (123,123);
END IF;
END
$$
但是,一旦我尝试将值作为参数给出,它就会中断,并在“=@”处或附近出现错误语法错误
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=@Id) THEN
UPDATE table SET
column=@Column
WHERE id=@Id;
ELSE
INSERT INTO table(id,column) VALUES (@Id,@Column);
END IF;
END
$$
为了隔离问题,只留下一个参数,就像这样
DO
$$
BEGIN
IF EXISTS (SELECT * FROM table WHERE id=@Id) THEN
UPDATE table SET
column=123
WHERE id=123;
ELSE
INSERT INTO table(id,column) VALUES (123,123);
END IF;
END
$$
给出的错误是 Npgsql.PostgresException:'42703:列 "id" 不存在'。那么我对参数有什么魔力吗?
Npgsql 不支持美元引号字符串文字 ($$) 中的参数。
但是,您似乎正在实施 upsert(更新或插入)- PostgreSQL 通过 INSERT ... ON CONFLICT
语法原生支持它。请参阅 this tutorial 或有关此功能的其他文档,这应该可以避免您尝试执行的操作的复杂性。