SQL Server查询干运行

biz*_*dee 28 sql sql-server

我运行了很多在表上执行INSERT's,insert SELECT' UPDATEALTER's'的查询,在开发这些查询时,运行的中间步骤用于测试查询的各个部分是否有效,可能会更改表或表中的数据.

是否可以执行查询的干运行并让SQL Management Studio为您提供结果,而无需实际修改数据或表结构?

在那一刻,我必须备份数据库,运行查询,如果它工作,好,如果它不,我必须恢复数据库,这可能需要大约一个小时,我试图避免浪费所有这些时间不得不恢复数据库.

Boh*_*ian 59

Use an SQL transaction to make your changes then back them out.

Before you execute your script:

BEGIN TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

After you execute your script and have done your checking:

ROLLBACK TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

Every change in your script will then be undone.

Note: Make sure you don't have a COMMIT in your script!

  • 只是评论:如果有任何`IDENTITY`列,则回滚将导致值被"跳过".这是可以预料的. (6认同)
  • 应该注意的是,检查事务内的更改需要“WITH (NOLOCK)”表提示。 (2认同)

小智 5

开始事务,执行表操作,然后回滚,如下所示:

BEGIN TRAN

UPDATE  C
SET column1 = 'XXX'
FROM table1 C

SELECT *
FROM table1
WHERE column1 = 'XXX'

ROLLBACK TRAN
Run Code Online (Sandbox Code Playgroud)

这将回滚自此事务开始以来的最后一次提交以来执行的所有操作。

  • @PositiveGuy TRAN 确实似乎是有效的语法,至少对于 MS SQL 来说(sql-server 在问题中被标记):https://docs.microsoft.com/en-us/sql/t-sql/language-elements/ begin-transaction-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 说语法开始 BEGIN { TRAN | 交易 } (3认同)
  • 始终写一些描述,说明您的答案如何有助于解决操作问题 (2认同)
  • 我已经在其中添加了英文说明,如果您不同意,请随时回退。在以后的所有问题和答案中,请用英语描述,代码转储没有用。祝好运。 (2认同)