首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据postgres中的列名更新列?

如何根据postgres中的列名更新列?
EN

Stack Overflow用户
提问于 2018-04-28 23:59:37
回答 1查看 1.7K关注 0票数 1

我将范围缩小到两种可能性-- DynamicSQL和使用case语句。

然而,这两件事我都失败了。

我只是不明白dynamicSQL,以及如何在我的情况下使用它。

这是我使用case语句的尝试;许多失败的变体之一。

代码语言:javascript
复制
SELECT column_name,
CASE WHEN column_name = 'address' THEN (**update statement gives syntax error within here**)
END
FROM information_schema.columns
WHERE table_name = 'employees';

作为一个概述,我使用Axios与我的Node服务器对话,该服务器使用Massivejs.调用我的Heroku数据库。

也许这不是我们该走的路--我的主要问题是:

我遇到了麻烦,因为我计划将作为列名使用的值作为字符串发送到我的服务器。我一直试图用的电话是

代码语言:javascript
复制
update employees
set $1 = $2
where employee_id = $3;

再一次,我要进入那些使用巨大的。

我得到错误{ error: syntax error at or near "'address'"},因为我的传入值是字符串。我的想法是,上面的语句将允许我使用变量,因为'address'是由引号封装的。

但是,唉,我的思维过程让我失望了。

这似乎接近于回答我的问题,但如果使用动态SQL,我似乎想不出在我的情况下该做什么。

How to use dynamic column names in an UPDATE or SELECT statement in a function?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-29 00:46:44

我将向您展示一种通过使用函数来完成此操作的方法。首先,我们创建employees表:

代码语言:javascript
复制
CREATE TABLE employees(
id BIGSERIAL PRIMARY KEY,
column1 TEXT,
column2 TEXT
);

接下来,我们创建一个需要三个参数的函数:

columnName -需要更新的列的名称

columnValue -需要将列更新到的新值

employeeId -将更新的雇员的id

通过使用format函数,我们将更新查询作为字符串生成,并使用EXECUTE命令执行查询。

这是函数的代码。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION update_columns_on_employee(columnName TEXT, columnValue TEXT, employeeId BIGINT)
  RETURNS VOID AS
  $$
  DECLARE update_statement TEXT := format('UPDATE EMPLOYEES SET %s = ''%s'' WHERE id = %L',columnName, columnValue, employeeId);
  BEGIN
    EXECUTE update_statement;
end;
$$ LANGUAGE plpgsql;

现在,让我们在employees表中插入一些数据。

代码语言:javascript
复制
  INSERT INTO employees(column1, column2) VALUES ('column1_start_value','column2_start_value');

现在我们有一个id值为1的雇员,他的column1值为'column1_start_value‘值,column2为'column2_start_value’值。

如果要将column2的值从“column2_start_value”更新为“column2_new_value”,只需执行以下调用

代码语言:javascript
复制
SELECT * FROM update_columns_on_employee('column2','column2_new_value',1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50082128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档