如何处理在生产环境中执行即席查询?

时间:2011-12-12 12:48:06

标签: sql-server database

我遇到了一些情况,我必须在生产数据库中手动删除或修改记录。这通常是应用程序无法按照预期的方式工作的地方。

如何在不意外删除或修改我正在使用的表格中的所有记录的情况下删除或更新这些记录?

交易是否是实现这一目标的合适方式?

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

2 个答案:

答案 0 :(得分:3)

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

查看OUTPUT Clause。开始一个事务,执行你的update或delete语句,并使用输出子句,验证结果,然后提交事务。

我这样做:

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

我跑了,花时间看看结果。然后在我满意时将最后一个语句更改为COMMIT TRANSACTION并再次运行。

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

答案 1 :(得分: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