我需要对客户端数据库中的存储过程进行测试。无论如何都要测试存储过程而不影响数据库中的数据吗?
例如,SP中有一个插入查询,它将更改数据库的数据。
无论如何都有解决这个问题的方法吗?
答案 0 :(得分: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
答案 1 :(得分:2)
如果SP意图更改数据,并且您不允许更改数据,那么您将如何“测试”SP?你会确定它不会死吗?如果它没有返回错误但是没有插入数据怎么办?
您可以按照Valamas建议的类似路径,但您还需要实际测试 SP。例如,如果要根据特定参数值插入特定数据,则必须:
我无法向您展示代码,但我已经成功地使用Visual Studio单元测试框架在.NET中的代码中执行上述操作。可以使用NUnit或任何其他单元测试框架执行相同的操作。我没有使用Visual Studio数据库项目的数据库单元测试功能。我只是在代码中执行上述步骤,使用ADO.NET和SqlTransaction
类来控制事务。