2011-09-22 80 views
3

有没有什么办法可以将表和proc的“Alter”语句更改为“Drop if exists”当构建吐出脚本? 使用Visual Studio 2010 Ultimate。 TFS 2010.Visual Studio 2010数据库生成删除如果存在

+0

我很难从你的问题中告诉你用什么工具来生成脚本。我回答了这个问题,但我不确定这些脚本是否是VS使用的脚本。 –

回答

0

我相信你所指的代码是从一个模板生成的。

看吧......

C:\ Program Files文件\微软的Visual Studio 10.0 \ Common7 \工具\模板\数据库项目项

和修改这两个文件。

  • 新表Script.sql
  • 新的存储过程Script.sql
+0

嗯或许,但我认为这可能是在数据库项目中创建脚本/表格时使用的模板,而不是模式比较器使用的模板。 –

+0

听起来很有希望。会让你知道,并将其标记为答案,如果有效的话。 –

0

手续已经在第一次你会看到什么创建后,该工具获取代码从/读取数据库,不再是您可以编辑的脚本;当然,您可以将所显示的任何内容复制/粘贴到文本编辑器中,并将其另存为SQL文件(.sql扩展名)。

如果您尝试此示例代码

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'usp_test_proc') 
    BEGIN 
     DROP Procedure usp_test_proc 
    END 
ALTER PROCEDURE dbo.usp_test_proc 
    /* 
    (
    @parameter1 int = 5, 
    @parameter2 datatype OUTPUT 
    ) 
    */ 
AS 
    /* SET NOCOUNT ON */ 
    select name, comment from test_table 
    RETURN 

,你会得到这样的信息:

“无法保存对象,因为语句类型不支持它必须与创建或更改开始。”

我建议你创建自己的SQL程序文件,并添加顶部的存在statment,例如:

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'usp_test_proc') 
    BEGIN 
     DROP Procedure usp_test_proc 
    END 
CREATE PROCEDURE usp_test_proc 
    /* 
    (
    @parameter1 int = 5, 
    @parameter2 datatype OUTPUT 
    ) 
    */ 
AS 
    /* SET NOCOUNT ON */ 
    select name, comment from test_table 
    RETURN 

这样,你可以编辑/改变你的SQL代码文件在您方便的然后就重建过程通过Visual Studio菜单'数据/ Transact-SQL编辑器/新查询连接'打开一个新的查询连接,打开SQL文件并单击执行SQL工具栏按钮(绿色箭头)来连接到您的数据库。

+0

将看看这个。 –

+0

我建议使用CREATE-ALTER而不是DROP-CREATE,以避免丢失和重新创建时可能已应用于存储过程的权限。使用CREATE-ALTER,初始检查是IF NOT EXISTS,然后创建一个简单的伪处理程序。然后脚本的主要部分是ALTER PROC。我在这里给出了示例代码:http://stackoverflow.com/a/15911851/216440 –

相关问题