在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更有意义)
答案 0 :(得分:0)
MS-feedback网站上有关于此主题的一些问题。 这是一个:
https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260519
以下是关于该问题的一条评论(从上面链接的页面底部):
在SQL2000中,方法是If 存在,DROP后跟CREATE。 这件衣服完美无瑕,涵盖了所有 案例。它非常好,我们建造了 我们部署此脚本 模型。自SQl2005进入我们的 世界,我们有手工,繁琐 解决方案来替换自动化 脚本在移动中丢失了 SQL2000。
请读取If exists,DROP 然后是CREATE approac。它是 伟大的方式