以编程方式使用 SSDT 导入数据库
Import database with SSDT programmatically
我遇到这样一种情况,我需要从数据库中复制所有内容(数据除外)并将其部署到新数据库中。我目前通过从现有数据库导入 SSDT 然后将项目发布到新数据库来执行此操作。
我想知道是否有办法以编程方式执行此操作。理想情况下,我希望有一个流程,我可以为流程提供要复制的数据库名称、要复制到的数据库名称,然后该流程将自动执行导入和导出。
执行此操作的好方法是什么?
[2]: 运行 这个脚本代码
希望对您有所帮助
您可以通过编程方式完成,但我认为最简单的方法是购买 redgate sql compare 的许可证并使用其命令行版本。
SSDT 由称为数据层应用程序框架(也称为 DacFX)的库提供支持。 DacFX 是一个 public API,可用于提取和发布 dacpac 文件。您可以在 Visual Studio 或 SQL 服务器下的程序文件中找到 DacFX 的副本,目录如下:
- C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0
- C:\Program Files (x86)\Microsoft SQL Server0\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 Server0\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 Server0\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");
}
}
}
我遇到这样一种情况,我需要从数据库中复制所有内容(数据除外)并将其部署到新数据库中。我目前通过从现有数据库导入 SSDT 然后将项目发布到新数据库来执行此操作。
我想知道是否有办法以编程方式执行此操作。理想情况下,我希望有一个流程,我可以为流程提供要复制的数据库名称、要复制到的数据库名称,然后该流程将自动执行导入和导出。
执行此操作的好方法是什么?
[2]: 运行 这个脚本代码
希望对您有所帮助
您可以通过编程方式完成,但我认为最简单的方法是购买 redgate sql compare 的许可证并使用其命令行版本。
SSDT 由称为数据层应用程序框架(也称为 DacFX)的库提供支持。 DacFX 是一个 public API,可用于提取和发布 dacpac 文件。您可以在 Visual Studio 或 SQL 服务器下的程序文件中找到 DacFX 的副本,目录如下:
- C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0
- C:\Program Files (x86)\Microsoft SQL Server0\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 Server0\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 Server0\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");
}
}
}