2012-03-19 68 views

回答

3

您可以在事务中运行存储过程。通过在注释行之间放置语句来使用此脚本。运行整个脚本,您的交易将处于未提交状态。然后,突出显示ROLLBACK或COMMIT行并相应地执行以完成。

总是有备份。

如果可能的话,在沙箱中工作,远离客户数据是原则问题。

请注意,在决定是提交还是回滚时,您可能会锁定可能会阻塞其他sql语句的数据。

BEGIN TRANSACTION MyTransaction 
GO 

-- INSERT SQL BELOW 


-- INSERT SQL ABOVE 

GO 
IF @@ERROR != 0 
BEGIN 
     PRINT '--------- ERROR - ROLLED BACK ---------' 
     ROLLBACK TRANSACTION MyTransaction 
END 
ELSE 
BEGIN 
     PRINT '--------- SCRIPT EXECUTE VALID ---------' 
     PRINT '--------- COMPLETE WITH ROLLBACK OR COMMIT NOW! ---------' 
     --ROLLBACK TRANSACTION MyTransaction 
     --COMMIT TRANSACTION MyTransaction 
END 
2

如果SP意味着改变数据,如果你不允许的数据改变,那么如何将你的“测试”的SP?你会确保它不会死?如果它没有返回错误,但是没有插入任何数据呢?

你可以按照类似的方式去Valamas建议的,但你实际上也需要测试的SP。例如,如果特定的数据是指基于特定的参数值被插入,那么你就必须:

  1. 开始事务
  2. 在数据库中创建的任何测试数据
  3. 调用与SP具体的参数值
  4. 仍在交易中,检查数据库,看看是否正确的行插入
  5. 回退事务

我无法向您展示代码,但是我已经成功地使用Visual Studio单元测试框架在.NET中执行上述代码。人们可以用NUnit或任何其他单元测试框架来做同样的事情。我没有使用Visual Studio数据库项目的数据库单元测试功能。我只是在代码中完成了上述步骤,使用ADO.NET和SqlTransaction类来控制事务。

相关问题