以前使用していた VSDBCMD は SQL Server 2012 に展開されず、それをサポートする必要があったため、これと同様のことを行う必要がありました。私が見つけたのは、SQL Server データ ツール ( http://msdn.microsoft.com/en-us/data/tools.aspx )の一部として提供されていると思われる Microsoft.SqlServer.Dac アセンブリでした。
これをクライアント マシンで実行する場合は、フル バージョンの .NET 4 フレームワークと SQL CLR 型および SQL T-SQL ScriptDOM パック ( http://www.microsoft.com/en-us/downloadを参照) が必要になります。 /details.aspx?id=29065
以下のコードは、新しい展開方法をテストするために作成したモックアップからのもので、特定の .dacpac ファイルを展開します
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Dac;
using System.IO;
namespace ConsoleApplication3
{
class Program
{
private static TextWriter output = new StreamWriter("output.txt", false);
static void Main(string[] args)
{
Console.Write("Connection String:");
//Class responsible for the deployment. (Connection string supplied by console input for now)
DacServices dbServices = new DacServices(Console.ReadLine());
//Wire up events for Deploy messages and for task progress (For less verbose output, don't subscribe to Message Event (handy for debugging perhaps?)
dbServices.Message += new EventHandler<DacMessageEventArgs>(dbServices_Message);
dbServices.ProgressChanged += new EventHandler<DacProgressEventArgs>(dbServices_ProgressChanged);
//This Snapshot should be created by our build process using MSDeploy
Console.WriteLine("Snapshot Path:");
DacPackage dbPackage = DacPackage.Load(Console.ReadLine());
DacDeployOptions dbDeployOptions = new DacDeployOptions();
//Cut out a lot of options here for configuring deployment, but are all part of DacDeployOptions
dbDeployOptions.SqlCommandVariableValues.Add("debug", "false");
dbServices.Deploy(dbPackage, "trunk", true, dbDeployOptions);
output.Close();
}
static void dbServices_Message(object sender, DacMessageEventArgs e)
{
output.WriteLine("DAC Message: {0}", e.Message);
}
static void dbServices_ProgressChanged(object sender, DacProgressEventArgs e)
{
output.WriteLine(e.Status + ": " + e.Message);
}
}
}
これは、2005 年以降のすべてのバージョンの SQL Server で機能するようです。Microsoft.SqlServer.Management.Dac にも同様のオブジェクト セットがありますが、これは以前のバージョンの DACFx にあり、最新バージョンには含まれていないと思います。そのため、可能であれば最新バージョンを使用してください。