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

标签 sql sql-server

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

我们的一位高级开发人员告诉我在实际编辑之前进行选择以测试它将影响哪些行。除此之外,有没有一种方法可以执行查询,查看结果,但在我告诉它这样做之前不将其提交到数据库?下次我可能就没那么幸运了。这是一项只有高级开发人员才能进行实时更新的好工作!。

最佳答案

在我看来,你只需要养成打开交易的习惯即可:

BEGIN TRANSACTION;

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

ROLLBACK;

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

如果您使用的是 Microsoft SQL Server Management Studio,您可以转到工具 > 选项... > 查询执行 > ANSI > SET IMPLICIT_TRANSACTIONS,SSMS 将自动为您打开事务。只是不要忘记在必须时提交,并且当您不提交/回滚关闭连接时,您可能会阻止其他连接。

关于sql - 如何在运行 sql server 之前先测试您的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579551/

相关文章:

mysql - 没有为我的友谊查询选择 1 个用户,但其余的是,这里有什么问题?

SQL Server 网址解码

sql-server - 编写适当的表描述

sql - 如何在 SQL Server 中反转字符串

sql-server - 将 SQL Server 数据导出到 CSV

mysql - 将选择结果添加到另一个选择并创建一个 json 键

sql - SQL 中的 CHAR 数据类型是否已过时?你什么时候使用它?

MySQL:用另一个表中的 COUNT 更新表?

sql - 如何在 VS 2012 中使用 LocalDb 连接到较旧的 SQL 数据库?

c# - 在 Entity Framework 中,当列定义为不可为空时,如何让存储过程返回可为空?