更新表而不使用更新语句

时间:2011-01-10 11:30:00

标签: sql

任何人都可以告诉如何在不使用update语句的情况下更新表的某些记录。可以使用select语句。

6 个答案:

答案 0 :(得分:7)

如果没有 更新 声明,我认为您不能 更新 表。

答案 1 :(得分:1)

使用select语句是不可能的。

您可以删除一行并插入相同的行+您的更改,这在很多方面就像更新一样,但会对外键造成很多麻烦。

哦,你的DBA可能会杀了你。

答案 2 :(得分:1)

您可以使用

REPLACE INTO tablename(primary key, ...{rest of the columns in the table}) 
VALUES(the same primary key, new values );

这将删除上一行并插入具有相同主键和更新列值的新行。没有那么值得,但也许还有其他方法。

答案 3 :(得分:0)

这取决于您使用的工具以及您实际想要实现的目标。

  • 有些库允许您更新从select语句中获取的数据。 (例如,ORM就像NHibernate,我认为也是ADO.NET)。这些库正在为您编写更新语句
  • 您可以使用在执行select语句时更改数据的函数或触发器。在这些函数或触发器中,您仍然有更新语句。
  • 出于安全原因,您必须确保没有人在您的select语句中注入update语句。因此,不仅仅是保存以执行select语句。

答案 4 :(得分:0)

  

如何更新表的某些记录   不使用更新语句。

使用MERGE声明。

  

可以使用select语句。

逻辑上,更新是一个删除和插入:INSERT INTO..SELECT到登台表,根据需要修改数据,然后从登台表DELETE然后INSERT INTO..SELECT

答案 5 :(得分:0)

关于你在问一个模块运行它创建的select语句时是如何发生这种情况的机会,那么你需要阅读SQL注入。如果没有某种更新语句(不仅包括更新,而是执行删除,然后插入或使用合并),您无法进行更新,并且用户必须具有对表的更新权限,但您可以向select语句添加更新,如果您没有正确地对其进行参数化以避免SQL注入,则会动态创建。