【问题标题】:How to generate multiple Alter Scripts in SSMS如何在 SSMS 中生成多个 Alter 脚本
【发布时间】:2013-03-05 03:22:10
【问题描述】:


我正在使用 sql server management studio 2008 尝试为我的每个存储过程生成一个更改脚本,以便为每个修订保存脚本。我可以轻松地为每个单独的过程生成一个更改脚本,但我不想手动完成一百个存储过程。

我知道 SSMS 在任务下有一个自动生成脚本的功能, 但唯一的选项是创建、删除和创建以及删除。 我似乎无法弄清楚如何启用更改。我已经搜索了许多 SO 文章,以及在 msdn 中进行了一些挖掘,但我一无所获。

我希望 stackoverflow 的优秀人才能够迎接挑战。 提前致谢

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    使用高级脚本选项中的检查对象存在选项。 脚本将包含一组 IF NOT EXISTS...CREATE 命令,并在 ALTER 下为您要编写脚本的每个存储过程。

    【讨论】:

    • 已确认:适用于 SSMS 2014。这里唯一的“完全正确”的答案。将产生类似的脚本:IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MySP]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[MySP] AS' END GO ALTER ....
    • 似乎这适用于 SP,但不适用于 UDF
    【解决方案2】:

    这不是一个非常优雅的解决方案,但它肯定会奏效。为什么不生成创建脚本,然后将所有出现的 CREATE PROCEDURE 替换为 ALTER PROCEDURE。

    【讨论】:

    • 也是一个好主意,这就是我现在正在尝试做的事情,但是有 395 个存储过程,所以如果它可以自动化,是的,那就太好了。
    【解决方案3】:

    您可以从 SQL SERVER Management Studio 自动生成存储过程,如下所示: 1)右键单击您的数据库->任务->生成脚本 2)选择“特定数据库对象”,然后选择要为其生成脚本的表/存储过程,然后按“下一步” 3)在此窗口中,您可以选择要保存脚本的位置,然后您会找到“高级”选项,单击它。然后你会发现一个选项“Script DROP and Create”,共有三个选项:Create、Drop、Drop 和 Create。根据需要选择一个。 4)然后按ok,然后“Next”,脚本会自动生成。

    如果您想将其从 Create 更改为 Alter,只需使用任何文本编辑器执行“全部替换”操作。 希望这个答案对其他人有所帮助。

    【讨论】:

      【解决方案4】:

      好吧,Drop/Create 与 alter 相同。通过声明您想使用 alter,您可以确定目标对象存在。为什么不从对象资源管理器中选择组并右键单击选择 DROP/Create。这也应该这样做。

      【讨论】:

      • 主要是出于安全考虑。如果在下降过程中出现问题,那可能不是一件好事。感谢您的帮助,但我希望不必如此。
      • 你用过RedGate工具带吗? Red Gate 有一个工具可以创建包,该包将尝试全有或全无提交并在失败时回滚先前的命令。
      • 其实我没有,不过听起来很有趣
      • 注意链接DROPCREATE对过程的调用肯定不ALTER语句相同,因为如果您删除该过程然后重新创建它,您为该过程指定的权限将丢失。因此,-1.
      • 如果您查看我建议的“红门”脚本,您会发现这不是问题。并且它可以很好地扩展到多个端点
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多