代码之家  ›  专栏  ›  技术社区  ›  Ash Burlaczenko

SQL更新查询-不能指定列名吗?

  •  0
  • Ash Burlaczenko  · 技术社区  · 16 年前

    是否可以编写update语句而不提供列名。例如

    UPDATE tbl VALUES('1','2','3','4') WHERE id = 1;
    

    值的数目将始终与列计数匹配。

    提前谢谢。

    我知道我可以删除行,然后做一个插入,然后id(这是一个\I)将是不一样的。

    请帮忙。

    6 回复  |  直到 16 年前
        1
  •  2
  •   Andomar    16 年前

    可以使用以下方法检索列列表:

    SELECT  COLUMN_NAME 
    FROM    INFORMATION_SCHEMA.COLUMNS C 
    WHERE   TABLE_NAME = 'MyTable'
    

        2
  •  2
  •   Mike    16 年前

    不,不可能:

    UPDATE Syntax

    如果不知道列名(这很奇怪),可以查询信息模式:

    INFORMATION_SCHEMA Tables

        3
  •  1
  •   Lekensteyn    16 年前

    假设你的第一列是一个自动递增的非空列。

    INSERT into tbl VALUES(NULL, val1, val2);
    
        4
  •  0
  •   Piotr    16 年前

    即使有可能,你为什么要这么做?如果要使用相同的查询表单进行更新和插入,可以使用“替换为tbl\u name(column\u names…)values(values…)”

        5
  •  0
  •   Albin Sunnanbo    16 年前

    别想那么做。

    这将使您的代码难以阅读和维护。

        6
  •  0
  •   user433598    16 年前

    我不确定在一个简单的SQL查询中是否可能。但是,如果可以创建存储过程,则可以选择。我不打算研究这些选择,但这里有一个例子。

    因此,既然您可以查询这个元数据,那么就可以遍历列名,为update语句构建一个带有列名的字符串,并对该字符串执行“execute”

    但这也有一些问题: -安全性-SQL注入是可能的,因为您正在构建要执行的字符串。也许您可以使用绑定变量,甚至可以参数化您构建和运行的字符串 -如果您构建了一个“硬编码”的UI,当表发生更改并且没有新列的默认值或者列被重新排序时,它就会中断。但是,如果您构建UI来读取元数据,然后执行相同的操作来创建要运行的字符串,那么就可以了。