2011-09-22 59 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 –

相關問題