синтаксическая ошибка в или около "= @" при использовании параметров - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь обновить / вставить данные в postgresql в зависимости от того, задан ли уже заданный идентификатор в таблице.

Это работает для обновления

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" не существует ".Так какое-то волшебство я должен делать с параметрами?

1 Ответ

0 голосов
/ 28 ноября 2018

Npgsql не поддерживает параметры внутри строковых литералов, заключенных в кавычки ($$).

Однако вы, похоже, реализуете upsert (update или insert) - PostgreSQL поддерживает это изначально с синтаксисом INSERT ... ON CONFLICT.См. этот учебник или другую документацию по этой функции, которая должна устранить сложность того, что вы пытаетесь сделать.

...