我想知道如果它们仍然是最新的,我如何测试现有的存储过程。我的意思是让我们在SQL Server中创建表,然后准备一个存储过程,将一些数据插入到该表中并从另一个表中选择一些。
一段时间(几个月)我们的桌子可能会被更改。我们的存储过程可能不是最新的(它可能会导致任何问题)。如果它是唯一一个程序,则不是问题。我们可以手动检查程序(只是尝试再次运行它,看看是否有任何错误)并在必要时修复它。但是,如果我们有很多程序,我们甚至不记得哪些程序与已更改的表相关联。
有没有办法自动运行所有程序(我不想传递任何参数,我只想测试程序是否可以编译而没有错误)?
@Md。 Elias Hossain - > 此查询将返回给定过程的过程名称和此过程的所有参数。 但我说情况看起来像: 我有很多存储过程,我有一些表的结构。现在我需要更改一些表(我不知道可能 - 添加一些列或重命名列的名称)而且我不需要更改任何程序!但是当我运行使用存储过程的应用程序(在表结构发生一些变化之后)时,它将失败(因为某些程序现在不正确 - 即某些字段可能不再存在)。
当我创建新程序时,如果它已准备就绪,我单击执行,它将运行并保存在所有程序中。如果出现问题,我将收到错误消息,并且不会保存程序。 现在我想做一些非常相似的事情。我想执行所有过程(在表结构中的任何更改之后)并检查它们是否仍然正确(结构含义正确)。所以我不需要知道结构的任何参数。 接下来我可以一个接一个地做,但我认为这不是一个好方法。所以我问是否有人知道执行所有程序的任何好方法(我不想将任何数据插入db或删除或选择任何东西。我唯一想做的是检查所有这些程序是否仍然正确结构意义)
答案 0 :(得分:2)
如果你只是想确保它们仍然有效,那么SQL Prompt中有一个名为“查找无效对象”的功能,它应该适合你。
这里有一个截图,说明这是如何工作的: http://www.red-gate.com/products/sql-development/sql-prompt/screenshots
如果您想'正确'并确保它们不仅可以编译,而且还可以按预期运行,那么您需要采用Klas的建议并实施单元测试。我工作的公司刚刚发布了一个预览UI测试器运行器SQL Test,它基于开源框架tSQLt。
有关详细信息,请访问:http://www.sql-test.com
答案 1 :(得分:1)
答案 2 :(得分:0)
您应该研究一个基于xUnit的框架。我的谷歌业力发现TSQLUnit。
答案 3 :(得分:0)
您可以使用以下查询检查/匹配带有表字段的过程参数,假设您知道最新的表字段。
SELECT Procs.Name, Params.Name FROM
SYS.PROCEDURES Procs INNER JOIN SYS.PARAMETERS Params
ON Procs.OBJECT_ID = Params.OBJECT_ID
AND Procs.NAME = 'InsertOfficeAssignment' -- Procedure Name
ORDER BY Params.Parameter_id