Sql 仅通过在事务中运行存储过程就可以安全地测试存储过程吗?
我有一个名为MoveSomeItems的sp,它从FooDB的tableA中获取一些行。并将它们移动到Bar Db中的tableA 我想测试此sp是否确实移动了项目Sql 仅通过在事务中运行存储过程就可以安全地测试存储过程吗?,sql,tsql,testing,transactions,Sql,Tsql,Testing,Transactions,我有一个名为MoveSomeItems的sp,它从FooDB的tableA中获取一些行。并将它们移动到Bar Db中的tableA 我想测试此sp是否确实移动了项目 在事务中运行此sp并选择行以查看它们是否被移动,或者我应该以不同的方式处理它,这是否足够?这取决于所有出错的影响是什么?如果目标表中的数据不正确,会有什么影响?会不会有人因此丧命,会不会惹恼他们,或者不太可能有人会注意到?修复起来容易吗 您所给出的方法存在相关风险。例如: 如果数据库非常繁忙,则可能会导致事务的过度锁定甚至死锁,从而
在事务中运行此sp并选择行以查看它们是否被移动,或者我应该以不同的方式处理它,这是否足够?这取决于所有出错的影响是什么?如果目标表中的数据不正确,会有什么影响?会不会有人因此丧命,会不会惹恼他们,或者不太可能有人会注意到?修复起来容易吗 您所给出的方法存在相关风险。例如:
如果您正在查看的数据库正在控制一个安全关键的流程或其他一些任务关键功能,甚至不要去那里,您可能会失去责任保险的无索赔或更糟的情况。在本例中,最好将备份恢复到测试服务器上并在那里进行测试,从而创建我的第一个场景。但请注意,在这样做时,有很多问题需要考虑。例如,在测试系统中使用个人信息可能是非法的。此外,可能需要模拟其他系统的依赖关系,以确保您不会影响它们,例如,不要将测试系统连接到实时电子邮件服务器。如果我有一个复杂的存储过程,我希望能够测试和回滚,我会添加一个输入参数(始终作为最后一个参数),@debug,默认值为0(因此在prod上运行时无需指定) 然后,我在末尾编写代码来测试参数是否为1,如果是,我运行任何select查询来显示我想要查看的数据,然后使用raiseerror将程序发送到catch块(在没有try catch块的情况下,决不写多个事务),并使其回滚
通过这种方式,您可以轻松地在dev上检查结果并自动回滚 存储过程的代码是什么?你最好分享它,让场景更清晰。如果他正在测试ona生产数据库,他会遇到更大的问题@麻烦的是pencilCake没有告诉我们什么是设置。尽管在实时数据库上进行测试存在风险,但如果系统不是任务关键型的,那么风险仍然可以接受。