English 中文(简体)
我如何按方案对2008年数据库中的所有储存程序进行修改。
原标题:How do I programatically perform a Modify on all stored procedures in my database in SQL 2008
  • 时间:2009-10-21 07:42:24
  •  标签:

我想要做的是简单明了地点击所储存的程序,选择修改程序,然后执行,以便我的储存程序运作。

Some of the tables in our database have changed and not all the sp s have been modified. ie old SP =

ALTER PROCEDURE [dbo].[myProcedure] SELECT name, address, typename from names GO

然后修改姓名表,删除姓名栏。

如果在SP上点击修改,那么我就会在电文产出窗口中发现错误信息。

I would like to do this for every sp in my database so i can see that it runs without errors. (we have 200 sps and it would take a long time to do it manually)

任何想法都会受到高度赞赏。

最佳回答

您应该以下列形式组成一个测试案件的档案:

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

不幸的是,除非:

  • None of your stored procedures take parameters.
  • Your stored procedure parameters are derivable (highly unlikely).

即使你确实提供了一套特定的参数值,但这种微粒是全面检测,所有储存在你的数据库中的代谢都是免费的。 这只是证明,诉讼是出于这些特定理由的。 底线:在适当单位测试时没有捷径。

问题回答

各位可以写一个 cur子,通过他们执行。 但是,你们如何知道为投入参数提供哪些价值? 如果没有一个这样的参数可以发挥作用。

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

处理参数(假设你能够显示所使用的价值)将与内环相仿,以便获得参数名称,然后向他们提供价值。





相关问题