2009-10-21 47 views
0

我想要做的是模拟右键单击存储过程并选择Modify,然后执行以便存储过程运行。我如何以编程方式对SQL 2008中的数据库中的所有存储过程执行修改

我们数据库中的一些表已经改变了,并不是所有的sp都被修改了。 即旧SP =

ALTER PROCEDURE [DBO]。[myProcedure] SELECT姓名,地址,从 GO

然后名称表被修改和类型名塔中除去名称类型名称。

如果我点击SP上的修改,然后执行我在消息输出窗口中收到错误消息。

我想为我的数据库中的每个sp执行此操作,以便我可以看到它运行时没有错误。 (我们有200 sps,手动操作需要很长时间)

任何想法将不胜感激。

回答

1

您应该撰写形式的测试案例的文本文件:

exec <stored proc> [args] 
if (@@error <> 0) 
begin 
    print "Fail" 
end  
go 

不幸的是没有办法,除非任何进一步自动化此:

  • 的存储过程无带参数。
  • 您的存储过程参数是可导出的(非常不可能)。

即使你提供一个特定的一组参数值,这是不全面的测试,在数据库中的所有存储的特效都是免费的错误。它只是验证了这个特别版的争论。底线:当涉及适当的单元测试时,没有捷径

+0

你是对的:* OP *无法绕过单元测试 – 2009-10-21 08:00:13

0

你可以编写一个游标来运行它们中的每一个执行它们。但是,您如何知道为输入参数提供了什么值?如果他们都没有参数这样的事情会工作。

DECLARE @proc sysname 
DECLARE cur CURSOR FOR SELECT '[' + schema_name(schema_id) + '].[' + name + ']' 
FROM sys.procedures 
OPEN cur 
FETCH NEXT FROM cur INTO @proc 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC (@proc) 
    FETCH NEXT FROM cur INTO @proc 
END 
CLOSE cur 
DEALLOCATE cur 

处理参数(假设你可以计算出使用的值)会沿着相同的路线与内环得到的参数名称,然后用值提供给他们。

相关问题