如何在运行sql server之前先测试你的查询

Age*_*eis 5 sql sql-server

我在一个内部测试数据库中曾经犯过一次愚蠢的错误.我正在更新我刚刚添加的记录,因为我写了一个错字但是它导致了许多记录被更新,因为在where子句中我使用了外键而不是我刚刚添加的特定记录的唯一ID

我们的一位高级开发人员告诉我做一个select来测试它在实际编辑之前会影响哪些行.除此之外,有没有办法可以执行你的查询,看到结果,但没有让它提交到数据库,直到我告诉它这样做?下次我可能没那么幸运.这是一个很好的工作,只有高级开发人员才能进行实时更新!

Ped*_*ntz 9

在我看来,你只需养成开立交易的习惯:

BEGIN TRANSACTION;

UPDATE [TABLENAME]
SET [Col1] = 'something', [Col2] = '..'
OUTPUT DELETED.*, INSERTED.*       -- So you can see what your update did
WHERE ....;

ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

比你看到结果后再次运行,将ROLLBACK改为COMMIT,你就完成了!

如果您使用的是Microsoft SQL Server Management Studio,则可以转到Tools > Options... > Query Execution > ANSI > SET IMPLICIT_TRANSACTIONS,SSMS将自动为您打开事务.当你不必提交/回滚关闭连接时,不要忘记在必须时提交,并且可能阻止其他连接.


use*_*019 5

首先假设你在更新数据库时会犯一个错误,所以永远不要这样做,除非你知道如何恢复,如果你没有运行代码,

最重要的想法是它是一个开发数据库,​​期望它搞砸了 - 所以请确保你有一个快速的方法来重新加载它.

首先选择select总是一个好主意,看看哪些行受到影响.

但是,为了更快地回到数据库的良好状态,无论如何我都会这样做

对于简单的更新等

使用交易

执行a begin transaction然后执行所有更新等,然后选择检查数据

在您执行最后一次提交之前,数据库不会受到影响,只有在您确定一切正确或回滚到达开头状态时才会执行