2011-12-12 57 views
0

我遇到了一些场景,我必须在我们的生产数据库中手动删除或修改记录。这通常是应用程序无法按预期方式工作的地方。如何处理在生产环境中执行即席查询?

如何删除或更新这些记录,而不会意外删除或修改我正在使用的表中的所有记录?

交易是实现此目的的合适方式吗?

如果有帮助,我正在使用SQL Server Management Studio。

回答

3

是的。交易总是一个好主意。

查看OUTPUT Clause。开始一个事务,使用output子句执行更新或删除语句,验证结果,然后提交事务。

我这样做:

BEGIN TRANSACTION; 
DELETE table1 
OUTPUT DELETED.*; 
ROLLBACK TRANSACTION; 

我运行,需要时间来看看结果。然后当我满意并再次运行时,将最后一条语句更改为COMMIT TRANSACTION

这就是说,我会尽我所能避免这样做。吓到我了。如果您发现自己可能不止一次地这样做,可以在提供此注册功能的应用程序中添加一些内容(或修复您正在清理的错误)。

2

是的,你可以在测试时使用TRAN

-- Start with Transaction 
BEGIN TRAN OperationStart 
     -- Delete Items 
    DELETE FROM TableName 
     -- Where Condition 

     -- Update Items 
    UPDATE TableName 
      SET Column1 = 'some values' 
     -- Where Condition 

    -- Check/See the changes 
    SELECT * FROM TableName 
     -- Where Condition 

-- Rollback all test operation/changes 
    -- Once you confirm then, COMMIT Transaction 
ROLLBACK TRAN OperationStart