首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Server,更新表的正确方法是什么?

对于Server,更新表的正确方法是什么?
EN

Database Administration用户
提问于 2014-03-30 00:45:20
回答 2查看 280关注 0票数 0

我没有导师可以问,所以我在寻求来自DBA社区的指导。我负责一个SERVER 2008 R2和SQL数据库,这些数据库是一个网站的资源和一个小公司的ERP系统。我已经犯了一个错误:在没有WHERE语句的情况下进行更新(幸运的是,它只影响了表w/ 30行)。但是,对于某些包含20K+行的表,在Server中更新表的正确方法是什么?我是先创建一个测试数据库副本并对其执行更新(但这没有将网站或ERP与其连接起来,因此我可以看到与这些副本有关的结果),还是事务功能是我应该学习和学习的方向,它的回滚功能似乎是正确的方法,或者可能还有其他一些其他进程所有SQL SERVER DBA都遵循。如有任何建议,我们将不胜感激。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2014-03-30 04:57:49

研究以下几点:

然后再读一遍这个一般的技巧:

  • 在代码的开头,GOTO : code
    • 针对少数“只运行部分代码,而不是所有代码”错误的部分保护。

  • 在代码的末尾,GOTO :TheBeginning
    • 针对少数“只运行部分代码,而不是所有代码”错误的部分保护。

  • 设置XACT_ABORT并启动事务
  • 用适当的WHERE和JOIN子句编码单个DML语句
  • 编写一个检查它影响了多少行的代码;如果它不像您预期的那么多行,则回滚事务。
    • 尽可能多地重复上面的代码。

  • 默认回滚transaction.
    • 只有在您确信所有提交都正确之后才对提交进行编码。
    • 只有在喝了一杯咖啡后才执行承诺,以防你在冰箱里感到恐惧。

  • 检查以验证事务计数为0
票数 3
EN

Database Administration用户

发布于 2014-03-30 12:22:18

除了使用显式事务外,我通常首先编写一个SELECT语句来查看会影响多少行,然后将WHERE子句复制到UPDATE语句中。

SELECT * FROM [SomeTable] WHERE [SomeDateColumn] > '3/1/2014'

由此,我看到100行将被更新。

因此,我要么复制WHERE子句,要么将SELECT转换为更新

UPDATE [SomeTable] SET [SomeIntColumn] = 8 WHERE [SomeDateColumn] > '3/1/2014'

如果将此与显式事务结合使用,则如果选择和更新之间的记录计数不匹配,则可以回滚。

这是一个很有用的习惯。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/62071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档