【问题标题】:Visual Studio 2010 Database Builds Drop If ExistsVisual Studio 2010 数据库构建如果存在则删除
【发布时间】:2011-11-23 01:59:37
【问题描述】:

当构建吐出脚本时,有什么方法可以将表和过程的“Alter”语句更改为“如果存在则删除”? 使用 Visual Studio 2010 Ultimate。 TFS 2010。

【问题讨论】:

  • 我很难从您的问题中看出您使用什么工具来生成脚本。我回答了这个问题,但我不确定提到的脚本是否是 VS 使用的。

标签: visual-studio-2010 build-automation database-project


【解决方案1】:

我相信您所指的代码是从模板生成的。

看这里...

C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\Templates\Database Project Items

并修改这两个文件。

  • 新建表脚本.sql
  • 新建存储过程 Script.sql

【讨论】:

  • hmm 也许吧,但我认为这可能是在数据库项目中创建脚本/表时使用的模板,而不是模式比较器使用的模板。
  • 听起来很有希望。如果可行,会通知您并将其标记为答案。
【解决方案2】:

第一次创建程序后,您将看到该工具从数据库获取/读取的代码,不再是您可以编辑的脚本;当然,您可以将显示的任何内容复制/粘贴到文本编辑器中,然后将其保存为 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

您将收到此消息:

“无法保存对象,因为不支持语句类型。它必须以 CREATE 或 ALTER 开头。”

我建议你创建自己的SQL过程文件,并在顶部添加exists语句,例如:

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 工具栏按钮(绿色箭头)。

【讨论】:

  • 我建议使用 CREATE-ALTER 而不是 DROP-CREATE,以避免丢失在删除和重新创建存储过程时可能已应用到存储过程的权限。使用 CREATE-ALTER 初始检查是 IF NOT EXISTS 然后创建一个简单的虚拟 proc。然后脚本的主要部分是 ALTER PROC。我在这里给出了示例代码:stackoverflow.com/a/15911851/216440
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多