blu*_*ers -2 best-practices select
似乎是一个简单的问题,但想知道如果您“点缀您的 i 并穿过您的 t”,那么执行此操作的“最佳”方法是什么。
没有更多细节,这就是我所能提供的:
不要使用视觉设计器。
您可能会想在 Management Studio 中使用“编辑前 200 行”(以前称为“打开表”)来“编辑”电子表格等数据。抵制诱惑。这些设计器充满了错误,在表上持有不必要的锁,选择任意 200 行,直到您按摩 SQL 查询并必须再次运行它,并且只会出现彻头彻尾的意外行为。(例如,您是否知道要输入1
或0
进入一BIT
列,您必须键入True
或False
?在 SQL Server 2012 版 Management Studio 之前输入1
或0
产生错误。)使用查询窗口并UPDATE
使用WHERE
子句编写正确的语句-除了具有 DML 的全部功能(包括UPDATE
基于连接,你不能用设计师做),你也可以保存你的查询,把它们放在源代码管理中,等等。你在表格网格中做的工作可以做到这一点的唯一方法是拍摄视频你所做的。
验证您的工作。我通常有这样的事情:
UPDATE t
SET x = REPLACE(x, 'foo', 'bar'),
y = x + ' line 2'
FROM dbo.table AS t
WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)
这样可以轻松注释掉前两行并添加,SELECT
以便我可以检查输出。因此,在运行更新之前,我可以通过以下方式进行完整性检查:
--UPDATE t
--SET
SELECT
x = REPLACE(x, 'foo', 'bar'),
y = x + ' line 2'
FROM dbo.table AS t
WHERE ID = 1;
Run Code Online (Sandbox Code Playgroud)
这向我展示了两件事:(1)我的SET
命令是否以正确的方式改变了列数据,以及(2)我的WHERE
子句是否选择了正确的行和正确的行数。
保护自己免受胖手指的伤害。当我对关键数据执行临时更新时,我总是开始查询,BEGIN TRANSACTION;
然后在下面添加注释--ROLLBACK TRANSACTION;
和--COMMIT TRANSACTION;
语句,COMMIT
只有当我对UPDATE
受影响的正确行数感到满意时,我才会突出显示并运行命令。在 SO 问题中,该人建议您应该先运行一次,ROLLBACK
然后再不运行它- 我认为这一步太多了,特别是如果操作需要很长时间,持有大量锁等。您应该能够验证不管它是否工作,不执行操作,将其回滚,然后重新执行整个操作。对我来说ROLLBACK
如果我在错误的时间点击 F5,只突出显示部分查询等,是否有这样的事情:
BEGIN TRANSACTION;
/* query goes here */
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
我实际上将 Mladen Prajdic 的SSMS 工具包与用于新查询的自定义模板一起使用,因此它始终适用于我。是的,当我只想对非生产实例运行快速即席查询时,这很烦人,但只需按 Ctrl+A 即可轻松覆盖所有查询。它还有其他一些简洁的功能,而且是免费的,所以无论如何都值得一试。
研究表。您可能认为您只更新了一行或几行,但可能还有其他您不知道的副作用。触发器、索引视图等。根据您更新的行数,您可能觉得需要手动更新统计信息(特别是如果您显着更改了过滤索引的结果,最近出现的一些内容)。
保护自己不被解雇。我们都会犯错,即使遵循这些规则,您仍然可能因对生产数据的临时更新而导致意想不到的后果。因此,在执行此类操作时,请始终做两件事:
UPDATE
业务会削弱客户或破坏您的业务或导致人们过度工作和压力,那么他们可能会开始寻找堕落者。不要做一个堕落的人。 归档时间: |
|
查看次数: |
4007 次 |
最近记录: |