我正在尝试将数据更新/插入到postgresql中,具体取决于表中是否已预先设置了给定的ID。
这适用于更新
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”不存在” 。那么,我有什么不可思议的参数吗?
答案 0 :(得分:0)
Npgsql不支持用美元括起来的字符串文字($$)中的参数。
但是,您似乎正在实现upsert(更新或插入)-PostgreSQL本身就以INSERT ... ON CONFLICT
语法支持它。请参阅this tutorial或有关此功能的其他文档,这应避免您尝试执行操作的复杂性。