标签: sql-server-data-tools

使用PostDeploy的SSDT复合数据库参考

我有两个SSDT项目.Database1引用Database2.

数据库项目

部署Database1时,将按预期部署Table2(来自Database2).这是因为在部署时,会选中"包含复合对象"复选框.

问题是只有Database2的架构/对象与Database1一起部署.作为Database1部署的一部分,脚本中不生成"Script.PostDeployment.sql"文件.但是,当我将Database2直接部署到目标数据库时,它包含在脚本中.

如何从引用的dacpac文件或SSDT项目中包含前/后部署脚本?

deployment sql-server-data-tools

7
推荐指数
1
解决办法
1789
查看次数

SQL Server数据工具和Visual Studio问题

我刚刚安装了vs2010 sp1 ultimate,sqlserver 2012和最新版本的sqlserver数据工具.我从源代码控制中打开了一个解决方案,并在尝试构建数据库项目时收到一堆错误,如下所示.

SQL71566:Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlFilegroup不能同时在Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlTable和群集的Microsoft.Data.Tools.Schema.Sql.SchemaModel上设置. SqlPrimaryKeyConstraint.

在Windows 7专业版,64位上运行

这对团队的其他成员来说很好,他们似乎都和我一样.

我已经尝试卸载并重新安装vs2010和ssdt

任何人的想法?

sql-server visual-studio-2010 sql-server-data-tools

7
推荐指数
2
解决办法
4066
查看次数

在Visual Studio 2012中使用数据库项目和SQL数据工具:如何解析临时表?

我正在学习Visual Studio 2012的"数据库项目"系统,使用Visual Studio 2012和Update 1,以及SSDT.

我发现它非常擅长在我的数据库中发现真正的问题,尤其是存储过程中的编程错误,其中有人从数据库表中删除了一个字段但没有通过并验证所有存储过程的执行没有错误.因此,通过Visual Studio 2012中的"build"命令验证.sql脚本非常方便.我不想放弃它.

但我还注意到,只要在存储过程中使用#TEMPTABLE,即使关闭"对常见对象启用扩展Transact-SQL验证",我仍然会在存储过程中获得涉及#temptable.field引用的"构建错误".

数据库项目采取了哪些步骤来确定临时表的模式?由于我的临时表在主模式中不存在,所以当我在创建数据库之后通过"导入数据库"选项将实际生产SQL数据库导入Visual Studio时,它们没有进入我的数据库项目.

我应该创建"#TEMPTABLE.SQL"文件并将它们添加到我的项目中吗?

示例错误:

c:\dev\...\dbo\Stored Procedures\xyz.sql(95,96): Warning:  SQL71502: Procedure: [dbo].[proc123] has an unresolved reference to object [#temptable1].[somefield1].
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以包含一个定义了一次使用的临时表的脚本,并将其包含在需要了解这些内容的各个地方,如果要彻底验证T-SQL,那就没问题了,如果转向扩展验证做了我认为它应该做的事情,那么也许没有必要.

论坛帖子暗示这是不可能解决的,我所能做的只是在文件级别有效地关闭此警告,这有点可怕.

关于同一主题的一个问题,但是对于Visual Studio 2010来说,这个技术已经被淘汰出局,微软已经多年了解它并且没有采取任何措施.现在在VS2012.U1 + SSDT_Dec2012中有什么好转的吗?

t-sql database-project visual-studio-2012 sql-server-data-tools

7
推荐指数
1
解决办法
3040
查看次数

关于SSDT开发过程的提示以及有关自动化单元/集成测试的最佳实践

我现在正在几个论坛,博客,MSDN等上搜索几天,但到目前为止我还没有找到关于这个主题的任何指导.我将尝试以更详细的方式解释这篇文章,因为我认为SSDT开发的信息和文档没有很好地记录,并且没有像VS 2010数据库项目(http://vsdatabaseguide.codeplex.com/)那样的最佳实践文档.

我是一名C#开发人员(没有DBA),我们正处于绿色领域项目开发阶段(10-15名开发人员),我们目前正在定义我们的开发过程,包括数据库开发的处理.

我们想要使用的技术和工具链:

  • EF 5(模型第一,也许我们首先将其更改为数据库,因为视图,索引等问题更容易处理)
  • SSDT(SQL Server数据工具)
  • VS 2012/TFS 2012
  • 用于自动化单元/集成测试的MS测试

开发过程基于测试驱动开发,如下所示:

  1. 每个功能都由一个开发人员在一个单独的功能分支上开发
  2. 设计和实现单元测试(=功能实现)
  3. 如果某个功能需要数据库访问,那么开发人员必须a)创建/更新EF模型b)通过EF的"从模型生成数据库"创建localDB数据库c)通过模式比较创建/更新SSDT项目d)创建使用测试初始化​​方法进行单元测试,该方法创建新数据库并根据每个测试的测试数据
  4. 将功能分支合并回集成分支
  5. 在检入合并后,CI构建执行单元/集成测试

所以有一些观点我不是100%肯定如何解决它们(特别是单元测试的数据库处理),如果你能把我放在正确的方向,我将不胜感激:

  1. 如何解决自动化单元测试的数据库创建:

    a)为每个执行的测试方法执行SQL数据库生成脚本(可以通过SSDT发布功能手动创建)?这是我更喜欢的选项,因为每个测试都有一个干净且一致的数据库状态.是否存在为每个测试创建localdb数据库的性能问题?

    b)或者使用msbuild任务"SQLPublish"或"sqlPackage.exe"?我认为这不是一个选择,因为这将是一次性的事情,我想为每个单元测试创​​建一个新的测试数据库.

    c)或者手动创建测试数据库并将*.mdf文件保存到源控制文件夹的根目录并为每个测试创建一个副本?但是我不喜欢这样,因为开发人员A可以覆盖该文件,该文件可能会从之前检查过其更改的其他开发人员B进行更改.这意味着开发人员

  2. 如何解决自动化单元测试的测试数据创建:

    a)执行测试特定的SQL脚本,为每个测试插入适当的测试数据.我认为这也意味着要创建一个新的数据库,如第1点所述.再次,这是我的首选.

    b)或者使用EF来创建测试数据似乎不是一种干净的方式,因为这取决于EF模型实现,它应该通过功能单元测试实际上进行隐式测试.

    c)或使用手动创建的测试数据库文件.但这会使开发过程中的开发过程更加复杂.其他开发人员也可以覆盖这一点.

也许很高兴提到我们对单元测试的期望.我们的单元测试的目标不是像存储过程那样测试数据库模式等等.我们希望使用"代码"单元测试来测试部分应用程序功能,这些单元测试也可以看作是集成测试.

那么你们中的任何人都有类似的开发过程,你们的经历是什么?有什么建议可以改善我们的开发过程 有关于SSDT开发的资源或最佳实践文档吗?对我来说最重要的问题是,您是如何解决自动化单元测试的,包括正确的数据库处理和集成测试?

database integration-testing unit-testing entity-framework sql-server-data-tools

7
推荐指数
1
解决办法
1169
查看次数

"如果可能发生数据丢失,阻止增量部署"的粒度

在SQL Server数据工具中,您可以使用部署选项"如果可能发生数据丢失则阻止增量部署",我认为这是保持检查的最佳做法.

假设我们有一个表foo,一个现在是冗余的列栏 - 没有依赖项,外键等等,我们已经在数据层和存储过程中删除了对该列的引用,因为它根本就没用过.换句话说,我们对放弃此列不会产生任何不利影响感到满意.

美中不足有几种苍蝇:

  1. 该列中包含数据
  2. 该数据库已发布到数百个分布式客户端,并且可能需要数月才能使更改波及所有客户端

在填充列时,除非我们更改"阻止增量部署,否则可能发生数据丢失"选项,否则发布将失败.这个选项是在数据库级别,而不是表级,因此由于客户端的分布式特性,我们必须在所有数据库更新之前关闭"数据丢失"选项数月,并将其重新打开一旦所有客户都更新了(我们的数据库有我们构建的版本号).

您可能认为我们可以使用预部署脚本解决此问题,例如

if exists (select * from information_schema.columns where table_name = 'foo' and column_name = 'bar') BEGIN
  alter table foo drop constraint DF_foo_bar
  alter table foo drop column bar 
END
Run Code Online (Sandbox Code Playgroud)

但是,除非我们关闭"数据丢失可能发生"选项,否则这将失败.

我只是对其他人在这种情况下做了什么感兴趣,因为我想要具有目前看来不可能的粒度.

sql-server database-project sql-server-data-tools

7
推荐指数
2
解决办法
2787
查看次数

SSDT在创建发布预览时发布错误

我使用Visual Studio 2013来管理包含我们的数据库架构的.sqlproj文件.该架构已成功部署了数十次.

尝试发布到一个特定目标数据库时,"创建发布预览"步骤似乎失败,但未给出错误.预览的输出包括一些预期的警告:

  • 列{...}被删除,可能会丢失数据
  • 如果执行此部署,对{...}的更改可能会在{...}中引入运行时错误
  • 此部署在执行期间可能会遇到错误,因为{...}的更改会被{...}在目标数据库中的依赖性阻止

我已取消选中"如果可能发生数据丢失,则阻止增量部署".

预览只是停止,没有生成脚本.

dacpac sql-server-data-tools

7
推荐指数
1
解决办法
7088
查看次数

如何使SSDT Profile.xml SqlCmdVariable为空字符串或可选

我正在为我们的MSSQL项目使用SSDT(和sqlproj).发布到每个环境时,我们需要设置一些变量.

这在我们为所有变量赋值的大多数环境中都很有用,但是当我们发布到我们的实时数据库时,我希望能够使DomainPrefix成为空白字符串.

当我尝试更改Live.profile.xml以将DomainPrefix设置为无值时,我收到错误:"生成部署计划期间发生错误.部署无法继续.缺少以下SqlCmd变量的值:DomainPrefix."

这就是我希望Live.profile.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
  <PropertyGroup>
    <TargetDatabaseName>DB_NAME</TargetDatabaseName>
    <DeployScriptFileName>DB_NAME.sql</DeployScriptFileName>
    <TargetConnectionString>CONNECTION_STRING</TargetConnectionString>
    <ProfileVersionNumber>1</ProfileVersionNumber>
  </PropertyGroup>
  <ItemGroup>
    <SqlCmdVariable Include="DomainPrefix">
      <Value></Value>
    </SqlCmdVariable>
    <SqlCmdVariable Include="Environment">
      <Value>live</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何将SqlCmdVariable设置为空值或使其成为可选变量?

使用:

  • VS 2013 sqlproj
  • SqlPackage.exe从命令行运行发布到DB

sql-server sqlcmd sqlproj sqlpackage sql-server-data-tools

7
推荐指数
1
解决办法
1329
查看次数

数据库选项有一个未解析的文件组引用[FILESTREAM]

我的Visual Studio解决方案中的SQL Server数据工具项目的上一次迭代使用了FileTables/FILESTREAM.此后,代码库被重构为不使用FileTables,因此我删除了引用该功能的所有文件.我在尝试重建项目时遇到此错误:

错误367 SQL71501:数据库选项具有对文件组[FILESTREAM]的未解析引用.使用项目属性的项目设置页面删除引用.

按照错误消息的说明,我进入项目属性>项目设置>数据库设置,并尽可能多地删除对FILESTREAM的引用.但是,我仍然收到此错误消息.我该怎么解决?

提前致谢.

sql-server visual-studio sql-server-data-tools

7
推荐指数
1
解决办法
1484
查看次数

Visual Studio 2015数据库项目是否可以发布到SQL Server _and_ Azure?

我有一个解决方案,需要针对SQL Server 2014 和 Microsoft Azure SQL数据库V12.

在我的项目设置中,如果我将目标平台设置为Azure,我无法发布到SQL Server - 我收到此错误:

指定Microsoft Azure SQL数据库v12作为目标平台的项目无法发布到SQL Server 2014.

如果我将目标平台设置为SQL Server 2014并尝试发布到Azure数据库,则会出现反向错误.

有没有办法发布到两个平台,而不必每次都更改项目设置?

请注意,我不是要尝试迁移.我需要用我的脚本支持这两种数据库.

sql-server sql-server-data-tools azure-sql-database

7
推荐指数
1
解决办法
1349
查看次数

单击SSDT中的维度设计器中的"属性关系"选项卡时出现字体错误

我是SSDT的新手,我正在学习名为Multidimensional Modeling(Adventure Works Tutorial)的Analysis Services教程.我目前正在第3课,关于修改 "修改属性关系"标题下的客户维度的步骤.

当我打开Customer Dimension 的Dimension Designer窗口时,如果单击属性选项卡,则会收到一条很长的错误消息.我一直在网上搜索,没有发现这个错误.有谁知道这个错误的原因是什么?我已经检查了我的字体文件夹,我已经有了Arial字体.

 ===================================

 An error prevented the view from loading. (Microsoft Visual Studio)

 ===================================

 Exception has been thrown by the target of an invocation. (mscorlib)

 ------------------------------
Program Location:

   at System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo method, Object target, SerializationInfo info, StreamingContext& context)
   at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
   at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder)
   at System.Runtime.Serialization.ObjectManager.DoFixups()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler …
Run Code Online (Sandbox Code Playgroud)

ssas cube dimensional-modeling visual-studio-2012 sql-server-data-tools

7
推荐指数
0
解决办法
86
查看次数