我想用Server Management Studio提取MSSQLServer数据库的数据库模式.我使用Extract命令"Extract Data-tier Application .."
在数据库中有几个对另一个数据库的引用.因此,我得到以下错误.
提取数据库时出错:验证数据包的模式模型失败.错误SQL71562:验证元素[dbo]时出错.[x]有一个未解析的对象[dbo]的引用.[y].从此平台创建包时不支持外部引用.
问题是,SSMS使用带参数/ p的SQLPackage.exe :VerifyExtraction = True.当我使用控制台并在没有此参数的情况下调用SQLPackage.exe时,它默认使用/ p:VerifyExtraction = False,我可以创建.dacpac文件.
有没有办法配置SSMS以禁用验证?
我们正在使用SQL Server数据层应用程序(dacpac或DAC包),我很难找到当前版本的数据库.
有没有办法使用以下任何方法获取当前版本:
我正在使用Microsoft Data-Tier Application框架来创建基于DacPackage对象的部署脚本.我试图使用Microsoft.SqlServer.Management.Smo.Server类来执行此脚本...
SqlConnection deployConnection = new SqlConnection(connBuilder.ToString());
deployConnection.Open();
Server server = new Server(new ServerConnection(deployConnection));
server.ConnectionContext.ExecuteNonQuery(deployScript);
Run Code Online (Sandbox Code Playgroud)
然而,这错误...
Unhandled Exception: Microsoft.SqlServer.Management.Common.ExecutionFailureException:
An exception occurred while executing a Transact-SQL statement or batch. --->
System.Data.SqlClient.SqlException: Incorrect syntax near ':'.
Run Code Online (Sandbox Code Playgroud)
我知道这个问题的答案是我需要处于SQLCMD模式,但我不知道如何告诉我的ServerConnection在所述模式下执行.
我想我的问题不像我在标题中说的那样具体.我真正需要做的是通过.Net框架执行从DacPackage生成的脚本.谁能帮我这个?
c# sql-server sqlcmd data-tier-applications sql-server-data-tools
我有一个带有SQL Server的以数据为中心的应用程序.它将被部署的环境不在我们的控制之下,并且没有DBA(它们都是小型企业),因此我们需要尽可能自动地分发每个应用程序/数据库更新的过程.
除了应用程序版本之间的正常变化(有时候是不可预测的),我们已经知道我们需要为每个版本分发一些新的种子数据.有时,此种子数据将与我们系统中的其他数据相关.例如:在v2-v3更新过程中,我们可能需要插入2个新行的某些主数据,在v5-v6更新过程中需要插入其他5行.
我们已经检查了Entity Framework Db Migrations(可用于自4.3.1版本以来没有Code-First的现有数据库),它以更自动和受控的方式表示传统的顺序脚本(如Fluent Migrations).
另一方面,凭借不同的理念,我们检查了SSDT及其dacpac,快照以及部署前和部署后脚本.
哪些技术/哲学更适合所描述的案例?
可以使用的任何其他技术/哲学?
还有其他建议吗?
提前致谢.
database-migration data-tier-applications fluent-migrator sql-server-2012 entity-framework-4.3
我有一个实用程序,可以填充 AssemblyInfo.cs 文件中的版本号。现在我需要实现一项功能来调整 Visual Studio 数据层应用程序 (DACPAC) 的版本号。
我发现如果打开项目属性并单击“数据层应用程序属性”按钮,我可以手动调整数字。但我找不到这个数字存储在项目文件中的位置,所以我不知道如何从我的实用程序自动更新它。
你知道版本号存储在哪里吗?
version-numbering visual-studio-project data-tier-applications sql-server-data-tools
我目前正在重写我团队的数据库部署 Powershell 脚本以使用 DACFx 3.0 API 而不是 2.0。我已成功使用新的控制器类使 DACPAC 升级成功Microsoft.SqlServer.Dac.DacServices。
剩下的唯一问题是:如何从现有数据库中获取当前 DACPAC 版本号?
作为部署脚本的一部分,我们将其与要升级到的 DACPAC 版本进行比较,以确定是否需要部署。这也用于决定是否运行与数据库相关的测试,因此这样我们就可以减少大量的构建时间。
旧的 DacFx2.0 API 位于Microsoft.SqlServer.Management.Dac命名空间中,因此在旧的 Powershell 脚本中,我们只需DacStore从数据库连接创建一个对象并从中获取 Version 属性:
我们的旧 POWERSHELL 脚本
$dacStore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
Write-Host "The following data-tier applications (instances) exist in the DAC store:"
foreach($dacInstance in $dacStore.DacInstances)
{
Write-Host Instance Name: $dacInstance.Name
Write-Host DAC Type Application Name: $dacInstance.Type.Name
Write-Host DAC Type Version: $dacInstance.Type.Version <--- **** this is what I need ****
}
...
Run Code Online (Sandbox Code Playgroud)
现在的问题是 3.0,API 存在于 …
我很高兴地编写了一个使用Sql Server数据库项目的产品,直到我们发现升级问题,生活一直很好.
当我们创建表,存储过程和各种其他数据库文件时,一旦部署到客户,他们就可以将自己的列添加到我们的dacpac创建的表中.
我们正在使用DacFx进行部署(Microsoft.SqlServer.Dac),并为坚持DBA部署的客户提供原始dacpac.
虽然在使用SSMS或类似工具时问题可能仍然存在,但我确信使用"正确"代码时,我们应该能够以某种方式通过代码部署来防止这种情况.
有没有人有同样的问题,可能找到了解决方案?
更新,添加部署设置的屏幕截图.从图像中可以看出,"已在目标中删除对象但未在项目中"对象设置已经关闭.

我很高兴能够使用DAC Fx和声明式数据库开发.对我来说,主要的障碍是如何处理跨架构的几个不同版本的复杂数据迁移.在旧世界中,我们可以按顺序运行所有升级脚本,这可以保证在数据迁移时架构处于正确状态.当升级路径是动态的时,这是如何工作的?
例如,假设现有实例上有多个版本的架构(DACPAC1-4):
如果我需要能够支持将DACPAC1-3服务器升级到最新的DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署脚本,以检测目前哪个DACPAC在目标上并正确处理数据迁移按顺序排列.此外,我不能简单地重复使用我最初编写的天真的部署后脚本,因为它们依赖于模式的中间版本.
提前感谢任何建议!
我们当前的数据库接近200MB,但一旦应用程序上线,我们预计这将增长到一个大的数量.可能是,20-30 GB的数据.
我们计划使用"dacpac"(由数据库项目生成 - SSDT)在生产服务器上进行部署.将使用许多表创建数据库,并在查找表中创建大量初始数据.
但是,当我们使用"dacpac"(由数据库项目生成 - SSDT)升级生产服务器上的数据库时,关注的是未来的部署.
由于我没有使用dacpac进行部署的经验,任何人都可以建议我关注 -
最后,它是否比传统的手动编写sql脚本升级数据库更好?
sql-server data-tier-applications sql-server-2012 dacpac sqlpackage
我刚刚将.bacpac文件恢复到本地 SQL Server 实例 (64b v12.0.4213),备份来自 azure sql 实例。
由于 OOM 异常,它失败了几次。我关闭了机器上的所有内容,在恢复结束时,SQL Server 服务实例消耗了 700MB 文件中的 13GB 内存!
幸运的是,恢复完成了,但似乎内存没有被释放/垃圾收集。当我写这篇文章时,它的内存仍然是 12GB。
这是一个已知问题吗?有什么方法可以恢复.bacpac并选择要忽略的表吗?您可以通过正常的数据恢复来完成此操作,最令人反感的表是 dbo.[Logs] 表、obvs。
这是一件很简单的事情,甚至在这里问我是否让我感到愚蠢,但由于我长期坚持这一点,我会在这里问.我正在开发visual studio中的数据层应用程序.我有常见的东西,如表,存储过程和一些后期部署数据.默认情况下,数据层应用程序随附Scripts/Post-Deployment文件夹.在这个文件夹中有一个名为Script.PostDeployment.sql的文件.为了更有条理,我在Post-Deployment中创建文件夹作为StaticData和TestData.我创建数据的插入语句位于这些文件夹中.所以,基于这个结构,我将以下代码添加到我的Script.PostDeployment.sql:
/*
Post-Deployment Script Template
--------------------------------------------------------------------------------------
This file contains SQL statements that will be appended to the build script.
Use SQLCMD syntax to include a file in the post-deployment script.
Example: :r .\myfile.sql
Use SQLCMD syntax to reference a variable in the post-deployment script.
Example: :setvar TableName MyTable
SELECT * FROM [$(TableName)]
--------------------------------------------------------------------------------------
*/
:r .\StaticData\States.sql
:r .\TestData\Logins.sql
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码不起作用.对于某些starnge原因,deploy命令只是忽略路径并在Scripts/Post-Deployment中查找States.sql和Logins.sql,而不是在相应的子文件夹中查找.其他人遇到过类似的东西?非常简单的问题,但带我永远解决这个问题.我尽力解释,但提出问题,我可以尝试让事情更清楚.谢谢!
sql-server ×6
dacpac ×3
dac ×2
ssms ×2
c# ×1
database ×1
powershell ×1
sqlcmd ×1
sqlpackage ×1