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

时间:2010-08-28 07:56:47

标签: sql mysql

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

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

值的数量始终与列数匹配。

提前致谢。

修改

我不知道列名只有列数。

我知道我可以删除该行,然后执行插入,然后id(即A_I)将不再相同。

请帮忙。

6 个答案:

答案 0 :(得分:2)

不,这是不可能的:

UPDATE Syntax

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

INFORMATION_SCHEMA Tables

答案 1 :(得分:2)

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

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

这允许您构建一个新的SQL查询,该查询检查每列中的值。最好在客户端中执行此操作,如C#,Python或perl脚本。

答案 2 :(得分:1)

  

...知道我可以删除该行,然后执行插入然后id(即A_I)将不会相同...

假设您的第一列是AUTO_INCREMENT NOT NULL。

INSERT into tbl VALUES(NULL, val1, val2);

答案 3 :(得分:0)

即使有可能,你为什么要这样做呢?如果要使用相同的查询表单进行更新和插入,可以使用“替换为tbl_name(column_names ...)值(值...)”

答案 4 :(得分:0)

不要试图这样做。

这将使您的代码难以阅读且无法维护 如果您以后更改表的列,则所有代码都会崩溃,并且由于代码中没有列名,您将无法搜索更改的列并找到它们的使用位置。

答案 5 :(得分:0)

我不确定它是否可以在简单的SQL查询中使用。但是,如果您可以创建存储过程,那么您可以选择。我不打算研究这些选项,但这是一个例子。

我知道Oracle有可以查询的元数据,因此您可以获取表的列名。 (我认为SQL服务器有类似的东西)

因此,既然您可以查询此元数据,那么您可以循环遍历列名,为更新语句构建一个包含列名的字符串,并对该字符串执行“执行”

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