1

在 MS SQL Server Management Studio 2005 中:

如果您将工具|选项|脚本|“包含 IF NOT EXISTS 子句”设置为 true,则修改存储过程将创建一个甚至无法正常工作的奇怪脚本。它看起来像下面这样:(省略号用于简洁)

 SET QUOTED_IDENTIFIER ON
 GO
 IF NOT EXISTS [...]
 BEGIN
 EXEC dbo.sp_executesql @statement = N'
 ALTER procedure [dbo].[p_Procedure]
 [...]
 '
 END

这显然不起作用,因为调用 ALTER 语句的唯一方法是存储过程不存在。

因此问题是:有没有办法改变这个生成的代码?某个地方的模板(这似乎与模板工具中的构建无关)?

(对此行为的轻微解释:编写 CREATE 语句的脚本会生成相同的代码,其中 IF NOT EXISTS 更有意义)

4

1 回答 1

0

MS-feedback 网站上有一些关于此主题的问题。这里有一个:

https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260519

以下是对该问题的一条评论(来自上面链接的页面底部):

在 SQL2000 中,方法是如果存在,则 DROP 后跟 CREATE。这完美无瑕,涵盖了所有情况。它非常好,以至于我们在这个脚本模型的基础上构建了我们的部署。自从 SQl2005 进入我们的世界以来,我们已经有了手动的、繁琐的变通方法来替换在迁移到 SQL2000 过程中丢失的自动脚本。

请务必阅读 If exists, DROP 后跟 CREATE approac。这条路很棒

于 2008-12-16T23:15:02.493 回答