是否可以编写更新语句而不提供列名称。例如
UPDATE tbl VALUES('1','2','3','4') WHERE id = 1;
值的数量始终与列数匹配。
提前致谢。
修改
我不知道列名只有列数。
我知道我可以删除该行,然后执行插入,然后id(即A_I)将不再相同。
请帮忙。
答案 0 :(得分:2)
答案 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以读取元数据然后执行相同的操作来创建要运行的字符串,那么它应该没问题。