以编程方式使用SSDT导入数据库

Liv*_*Liv 0 database sql-server deployment sql-server-data-tools

我有一种情况,我需要从数据库(数据除外)中复制所有内容并将其部署到新数据库.我目前通过从现有数据库导入SSDT然后将项目发布到新数据库来实现此目的.

我想知道我是否有办法以编程方式执行此操作.理想情况下,我想有一个适当的过程,其中我可以给进程的从数据库,该数据库的名称复制到,然后程序将只是自动进行导入和导出副本的名称.

什么可能是一个很好的方法来做到这一点?

Ste*_*een 8

SSDT由称为数据层应用程序框架(也称为DacFX)的库提供支持.DacFX是一个公共API,可用于提取和发布dacpac文件.您可以在Visual Studio或SQL Server下的Program Files中找到DacFX的副本,其目录如下:

  • C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130
  • C:\ Program Files(x86)\ Microsoft SQL Server\130\DAC\bin

您可以在此处下载最新版本的DacFX:https://www.microsoft.com/en-us/download/details.aspx? id = 51672

请注意,在安装DacFX时,还需要安装其依赖项SqlSysClrTypes和SqlDom,这些依赖项可以在上面的下载页面的"系统要求"部分找到.

要使用DacFX提取和发布dacpac文件,可以使用SqlPackage.exe,如下所示:

C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe /a:extract /scs:"Data Source=YOURSERVER;Initial Catalog=YOURDB;Integrated Security=true" /tf:C:\temp\yourdb.dacpac

C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe /a:publish /tcs:"Data Source=YOURSERVER;Initial Catalog=YOUROTHERDB;Integrated Security=true" /sf:C:\temp\yourdb.dacpac

或者,您可以使用Microsoft.SqlServer.Dac API以编程方式使用DacFX,如下所示: using Microsoft.SqlServer.Dac; class Program { static void Main(string[] args) { DacServices ds = new DacServices("Data Source=YOURSERVER;Initial Catalog=YOURDB;Integrated Security=true"); ds.Extract(@"C:\temp\yourdb.dacpac", "YOURDB", "AppName", new System.Version()); using (DacPackage dp = DacPackage.Load(@"C:\temp\yourdb.dacpac")) { ds.Deploy(dp, "YOUROTHERDB"); } } }