为了账号安全,请及时绑定邮箱和手机立即绑定

如何在SQLServer 2005中更新一个语句中的两个表?

如何在SQLServer 2005中更新一个语句中的两个表?

江户川乱折腾 2019-06-26 13:30:39
如何在SQLServer 2005中更新一个语句中的两个表?我想一次更新两张桌子。如何在SQLServer 2005中做到这一点?UPDATE    Table1,    Table2SET    Table1.LastName='DR. XXXXXX',    Table2.WAprrs='start,stop'FROM    Table1 T1,    Table2 T2WHERE    T1.id = T2.idAND    T1.id = '010008'
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

简短的回答是否定的。中输入多个表时,from子句,则只能在update关键词。即使您确实编写了一个“可更新”视图(它只是一个遵循某些限制的视图),这样的更新也会失败。以下是MSDN文档的相关剪辑(重点是我的)。

更新(Transact-SQL)

表_或_view_name引用的视图必须是可更新的和引用的准确地说是一个基表在视图的FROM子句中。有关可更新视图的更多信息,请参见创建视图(Transact-SQL)。

创建视图(Transact-SQL)

只要下列条件为真,就可以通过视图修改基础基表的数据:

  • 任何修改,包括UPDATE、INSERT和DELETE语句,都必须引用

    只有一个基表.

  • 视图中要修改的列必须直接引用表列中的基础数据。不能以任何其他方式派生列,例如通过下列方法:
    • 一个聚合函数:avg、count、sum、min、max、group、stdev、STDEVP、VAR和VARP。
    • 一种计算。不能从使用其他列的表达式中计算列。使用SET运算符UNION、UNIOALL、CROSSJOIN、OPTION和INTERSECT形成的列构成计算,而且也不可更新。
  • 被修改的列不受GROUPBY子句、有子句或DISTIVE子句的影响。
  • 在视图的SELECT_语句和WITH CHECKOPTION子句中没有使用TOP。

不过,老实说,您应该考虑在事务中使用两个不同的SQL语句,如LBushkin的示例所示。

最新情况:我最初关于可以在可更新视图中更新多个表的断言是错误的。在SQLServer 2005&2012上,它将生成以下错误。我已更正了我的答复,以反映这一点。

Msg 4405, Level 16, State 1, Line 1

View or function 'updatable_view' is not updatable because the modification affects multiple base tables.


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 836 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信