簡體   English   中英

如何在 SQL Server Management Studio 2008 中自動執行“生成腳本”任務?

[英]How can I automate the “generate scripts” task in SQL Server Management Studio 2008?

我想在 SQL Server Management Studio 2008 中自動生成腳本。

現在我做的是:

  • 右鍵單擊我的數據庫,任務,“生成腳本...”
  • 手動選擇我需要的所有導出選項,然后在“選擇對象”選項卡上點擊全選
  • 選擇導出文件夾
  • 最終點擊“完成”按鈕

有沒有辦法自動化這個任務?

編輯:我想生成創建腳本,而不是更改腳本。

與 SSMS 中的腳本生成相比,SqlPubwiz 的選項非常有限。 相比之下, SMO可用的選項幾乎與 SSMS 中的選項完全匹配,這表明它甚至可能是相同的代碼。 (我希望MS沒寫兩次!)有MSDN上幾個例子像這一次,顯示腳本表作為單獨的對象。 但是,如果您希望所有內容都使用包含“DRI”(聲明性引用完整性)對象(如外鍵)的“完整”模式正確編寫腳本,則單獨編寫表的腳本無法正確處理依賴項。 我發現有必要收集所有 URN 並將它們作為數組交給腳本編寫者。 這段從示例中修改的代碼對我有用(雖然我敢說你可以整理一下並多加評論):

    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Sdk.Sfc;
    // etc...

    // Connect to the local, default instance of SQL Server. 
    Server srv = new Server();

    // Reference the database.  
    Database db = srv.Databases["YOURDBHERE"];

    Scripter scrp = new Scripter(srv);
    scrp.Options.ScriptDrops = false;
    scrp.Options.WithDependencies = true;
    scrp.Options.Indexes = true;   // To include indexes
    scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script
    scrp.Options.Triggers = true;
    scrp.Options.FullTextIndexes = true;
    scrp.Options.NoCollation = false;
    scrp.Options.Bindings = true;
    scrp.Options.IncludeIfNotExists = false;
    scrp.Options.ScriptBatchTerminator = true;
    scrp.Options.ExtendedProperties = true;

    scrp.PrefetchObjects = true; // some sources suggest this may speed things up

    var urns = new List<Urn>();

    // Iterate through the tables in database and script each one   
    foreach (Table tb in db.Tables)
    {
        // check if the table is not a system table
        if (tb.IsSystemObject == false)
        {
            urns.Add(tb.Urn);
        }
    }

    // Iterate through the views in database and script each one. Display the script.   
    foreach (View view in db.Views)
    {
        // check if the view is not a system object
        if (view.IsSystemObject == false)
        {
            urns.Add(view.Urn);
        }
    }

    // Iterate through the stored procedures in database and script each one. Display the script.   
    foreach (StoredProcedure sp in db.StoredProcedures)
    {
        // check if the procedure is not a system object
        if (sp.IsSystemObject == false)
        {
            urns.Add(sp.Urn);
        }
    }

    StringBuilder builder = new StringBuilder();
    System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
    foreach (string st in sc)
    {
        // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
        // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
        builder.AppendLine(st);
        builder.AppendLine("GO");
    }

    return builder.ToString();

Brann 在 Visual Studio 2008 SP1 Team Suite 中提到的是數據庫發布向導的 1.4 版。 它隨 sql server 2008(可能只是專業版?)一起安裝到 \\Program Files\\Microsoft SQL Server\\90\\Tools\\Publishing\\1.4。 來自服務器資源管理器的 VS 調用只是調用它。 您可以通過命令行實現相同的功能,例如:

sqlpubwiz help script

我不知道 v1.4 是否和 v1.1 有同樣的問題(用戶被轉換為角色,約束沒有按正確的順序創建),但這對我來說不是一個解決方案,因為它沒有腳本對象到不同的文件,如 SSMS 中的 Tasks->Generate Scripts 選項。 我目前正在使用 Scriptio 的修改版本(使用 MS SMO API)作為數據庫發布向導 (sqlpubwiz.exe) 的改進替代品。 目前無法從命令行編寫腳本,我可能會在未來添加該貢獻。

Scriptio 最初發布在 Bill Graziano 的博客上,但隨后由 Bill 發布到 CodePlex 並由其他人更新。 閱讀討論以了解如何編譯以用於 SQL Server 2008。

http://scriptio.codeplex.com/

編輯:我已經開始使用 RedGate 的 SQL 比較產品來做到這一點。 它是 sql 發布向導本應具備的所有功能的非常好的替代品。 您選擇一個數據庫、備份或快照作為源,並選擇一個文件夾作為輸出位置,它會將所有內容很好地轉儲到文件夾結構中。 它恰好與他們的其他產品 SQL Source Control 使用的格式相同。

我編寫了一個名為SchemaZen 的開源命令行實用程序來執行此操作。 它比來自管理工作室的腳本要快得多,而且它的輸出對版本控制更友好。 它支持對模式和數據進行腳本編寫。

要生成腳本,請運行:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir

然后從腳本運行重新創建數據庫:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir

您可以使用 SQL Server 管理對象 (SMO) 自動執行 SQL Server 2005 管理任務,包括生成腳本: http://msdn.microsoft.com/en-us/library/ms162169.aspx

如果您是開發人員,請務必使用 SMO。 這是 Scripter 類的鏈接,這是您的起點:

腳本類

我沒有看到這些答案中提到的帶有 SQLPSX 的 powershell ......我個人沒有玩過它,但它看起來非常簡單易用,非常適合此類自動化任務,任務如下:

Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter

(參考: http : //www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100

項目頁面: http : //sqlpsx.codeplex.com/

這種方法的主要優點是它結合了直接使用 SMO 的可配置性/可定制性,以及使用簡單的現有工具(如數據庫發布向導)的便利性和可維護性。

在“工具”>“選項”>“設計器”>“表和數據庫設計器”中,有一個“自動生成更改腳本”選項,該選項將為您在保存時所做的每個更改生成一個。

您可以通過使用 INFORMATION_SCHEMA 表的 T-SQL 代碼來完成。

還有第三方工具 - 我喜歡 Apex SQL Script 正是因為您正在談論的用途。 我完全從命令行運行它。

如果您想要 Microsoft 解決方案,您可以嘗試:Microsoft SQL Server Database Publishing Wizard 1.1

http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

它創建了一個批處理,您可以在需要重建腳本的任何時候運行。

嘗試新的 SQL Server 命令行工具來生成 T-SQL 腳本並監控動態管理視圖。

像魅力一樣為我工作。 它是來自 Microsoft 的一個新的基於 Python 的工具,可從命令行運行。 一切都像 Microsoft 頁面上描述的一樣(見下面的鏈接) 使用 SQL 2012 服務器為我工作。

你用 pip 安裝它:

$pip 安裝 mssql 腳本程序

命令參數概覽照常使用 h 尋求幫助:

mssql 腳本程序 -h

提示:如果您通過 Windows 身份驗證登錄 SQL-Server,只需留下用戶名和密碼。

https://cloudblogs.microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management-觀看次數/

我一直在使用 DB 比較器 - 它是免費的,沒有大驚小怪的整個 DB 腳本,可以與另一個 DB 進行比較,還可以生成一個 Diff 腳本。 非常適合開發到生產更改腳本。 http://www.dbcomparer.com/

我還根據自己的需要構建了這個簡單的命令行工具。
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

它可以導出整個數據庫,並嘗試導出加密對象。 一切都存儲在文件夾和單獨的 sql 文件中,以便於文件比較。

代碼也可以在 github 上找到。

我正在使用 VS 2012(用於 MSSQL Server 2008 上的數據庫)比較數據庫有一個選項來保存它,比較和選項。 這基本上是您的交付設置。 之后,您可以進行更新或生成腳本。

我只是覺得稍后從文件加載它有點尷尬(從 Windows 資源管理器拖放),因為我沒有在解決方案資源管理器中看到該文件。

從 Visual Studio 2008 SP1 TeamSuite :

在服務器資源管理器/數據連接選項卡中,有一個發布到提供程序工具,它​​的作用與“Microsoft SQL Server 數據庫發布向導”相同,但與 MS Sql Server 2008 兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM