标签: sql-server-data-tools

如何在SSDT项目中包含自定义数据迁移和静态/参考数据?

我们有一个中等规模的SSDT项目(约100个表),它被部署到几十个不同的数据库实例中.作为构建过程的一部分,我们生成一个.dacpac文件,然后当我们准备升级数据库时,我们生成一个发布脚本并对数据库运行它.某些数据库实例会在不同时间升级,因此我们必须为这些升级和版本控制提供结构化流程.

大多数生成的迁移脚本正在删除和(重新)创建过程,函数,索引和执行任何结构更改,以及部署后脚本中包含的一些数据脚本.这两个与数据相关的项目我想知道如何在项目中最好地构建:

  1. 版本之间需要自定义数据迁移

  2. 静态或参考数据

版本之间需要自定义数据迁移

有时我们希望在升级过程中执行一次性数据迁移,我不确定将其纳入我们的SSDT项目的最佳方式.例如,最近我添加了一个新的位列dbo.Charge.HasComments来包含基于另一个表的(冗余)派生数据,并将通过触发器保持同步.令人讨厌但必要的性能改进(仅在仔细考虑和测量后才添加).作为升级的一部分,SSDT生成的发布脚本将包含必要的ALTER TABLE和CREATE TRIGGER语句,但我还想根据另一个表中的数据更新此列:

update dbo.Charge 
set HasComments = 1 
where exists ( select * 
               from dbo.ChargeComment 
               where ChargeComment.ChargeId = Charge.ChargeId ) 
and HasComments = 0 
Run Code Online (Sandbox Code Playgroud)

在我的SSDT项目中包含此数据迁移脚本的最佳方法是什么?

目前,我将每种类型的迁移都放在一个单独的文件中,该文件包含在部署后脚本中,因此我的Post-Deployment脚本最终看起来像这样:

-- data migrations
:r "data migration\Update dbo.Charge.HasComments if never populated.sql"
go
:r "data migration\Update some other new table or column.sql"
go
Run Code Online (Sandbox Code Playgroud)

这是正确的方法,还是有一些方法可以更好地配合SSDT及其版本跟踪,因此当SSDT发布针对已经处于更新版本的数据库运行时,这些脚本甚至都不会运行.我可以拥有自己的表来跟踪已经运行了哪些迁移,但是如果有一种标准的方法可以执行此操作,则不希望自己滚动.

静态或参考数据

一些数据库表包含我们称之为静态或参考数据的内容,例如可能的时区列表,设置类型,货币,各种"类型"表等.目前我们通过为每个表运行一个单独的脚本来填充这些表.部署后脚本.每个静态数据脚本都将所有"正确"的静态数据插入到表变量中,然后根据需要插入/更新/删除静态数据表.根据表格,仅插入或仅插入和删除但不更新现有记录可能是合适的.所以每个脚本看起来像这样:

-- table listing all the correct static data
declare @working_data table (...)

-- add all the static data …
Run Code Online (Sandbox Code Playgroud)

sql-server data-migration sql-server-data-tools

8
推荐指数
1
解决办法
2406
查看次数

DACPAC和SQL序列

我有一个Visual Studio数据库项目(DACPAC),其中包含许多SQL序列.但是,当我部署DACPAC时,它总是将序列值重置为Create脚本中包含的默认值(在本例中为1).例如

CREATE SEQUENCE [dbo].[MySequence]
AS INT
START WITH 1
INCREMENT BY 1;
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种方法来指示DACPAC忽略序列起始值,或者某种方式让DACPAC恢复正确的值作为部署后的步骤吗?

提前致谢

sql-server visual-studio dacpac sqlpackage sql-server-data-tools

8
推荐指数
1
解决办法
1557
查看次数

加载SSIS包或新项目时SSDT崩溃

随着SSDT 2016(GA)的发布,我加载了SQL Server 2016 GA Developer Edition,新的SSMS 2016独立版本,甚至Visual Studio 2015 Update 2(专业版)和Visual Studio仍然会在我尝试的任何时候崩溃使用SSIS模板(包括导入向导)打开SSIS包或创建新解决方案.我重新安装了使用建议的订单(SQL Server 2016,SSMS,SSDT)以及Visual Studio 2015,然后是SSDT.两者都导致同样的崩溃.我能够创建和打开所有其他解决方案类型(SSRS,SSAS,SQLCLR),因此它似乎是SSIS特有的问题.可以在此处找到Connect错误报告(连同附件和MSFT要求的所有内容):https://connect.microsoft.com/SQLServer/feedback/details/2781125/ssis-projects-crash-visual-studio

Visual Studio中的错误如下:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: devenv.exe
  Application Version:  14.0.25420.1
  Application Timestamp:    57685d85
  Fault Module Name:    KERNELBASE.dll
  Fault Module Version: 6.3.9600.18340
  Fault Module Timestamp:   5736541b
  Exception Code:   c06d007e
  Exception Offset: 00014878
  OS Version:   6.3.9600.2.0.0.272.7
  Locale ID:    1033
  Additional Information 1: d3a5
  Additional Information 2: d3a5b2a34c74c92cf7c3ff2061a46015
  Additional Information 3: 86f5
  Additional Information 4: 86f5db7ad561caf63ca32f7aba7c4416
Run Code Online (Sandbox Code Playgroud)

sql-server-data-tools visual-studio-2015 sql-server-2016

8
推荐指数
1
解决办法
2646
查看次数

如何使用dacpac和SqlPackage.exe部署时态表

我们正在尝试使用SQL Server 2016中的时态表.我们正在Visual Studio 2017中开发SSDT 15.1.6中的SQL脚本,但是在尝试部署构建期间生成的dacpac时遇到了问题.

我们的dacpac是使用部署的SqlPackage.exe,在尝试部署dacpac时遇到此错误:

创建[dbo].[TestHISTORY].[ix_TestHISTORY] ...
正在执行批处理时发生错误.
更新数据库(失败)
无法部署包.
错误SQL72014:.Net SqlClient数据提供程序:

消息1913,级别16,状态1,行1
操作失败,因为表'dbo.TestHistory'上已存在名为'ix_TestHISTORY'的索引或统计信息.

错误SQL72045:脚本执行错误.执行的脚本:
CREATE CLUSTERED INDEX [ix_TestHISTORY] ON [dbo].[TestHistory]([SysStart] ASC,[SysEnd] ASC);

当我们在SSDT中创建时态表时,我们有以下内容:

CREATE TABLE [dbo].[Test]
(
    [Id] INT NOT NULL PRIMARY KEY,
    [SysStart] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL,
    [SysEnd] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL,
    PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd])
)
WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE=[dbo].[TestHISTORY], DATA_CONSISTENCY_CHECK=ON))
Run Code Online (Sandbox Code Playgroud)

据我所知,问题在于dacpac的创造.项目构建完成后,创建的dacpac如下所示:

CREATE TABLE [dbo].[test]  
(
    [Id]       INT NOT NULL PRIMARY KEY …
Run Code Online (Sandbox Code Playgroud)

sql-server temporal dacpac sql-server-data-tools

8
推荐指数
1
解决办法
1488
查看次数

dacpac代表什么?

在Visual Studio 2012中,我们调用了新的项目类型SQL Server Database Project,编译时将创建.dacpac输出文件.

此术语的谷歌将链接它,Data-tier Application但我无法将此名称与DACPA和C链接!

什么dacpac代表什么?

compilation visual-studio-2012 sql-server-data-tools

7
推荐指数
3
解决办法
5257
查看次数

Visual Studio SSDT数据比较如何比较单个数据库中的两个表

尝试在SSDT中做一些简单的数据比较,但证明有点困难.

在一个数据库中,我有两个我想要比较的表.

这些表具有相同的模式,只是不同的表名.我只是想看看这个工具是否能给我一个很好的方法来比较两者中的数据.

即

tblOutput
tblOutput_210314
Run Code Online (Sandbox Code Playgroud)

但是这个选择两个表在一个数据库中相互比较我看不出如何实现.

您似乎只能选择源数据库和目标数据库中存在的表名.由于我的源数据库和目标数据库是相同的,我基本上将我的表与自己进行比较?

有人知道通过Data Compare实现这一目标的方法吗?

  • Visual Studio 2012
  • SQL Server数据工具
  • 数据比较

sql-server data-comparison visual-studio-2012 sql-server-data-tools

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

在Sql Server 2012中导入bacpak时出错

从windows azure导入bacpac文件时出现此错误

TITLE: Microsoft SQL Server Management Studio
------------------------------

Count not load schema model from package. (Microsoft.SqlServer.Dac)

------------------------------
ADDITIONAL INFORMATION:

Internal Error.  The internal target platform type SqlAzureDatabaseSchemaProvider
does not support schema file version '2.5'. 
Run Code Online (Sandbox Code Playgroud)

大多数在线帮助建议升级SSDT,但我已经安装了最新版本的VST for VS2012

sql-server bacpac visual-studio-2012 sql-server-data-tools

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

DACPAC将无法部署,因为"无法连接到服务器"?

我正在尝试将DACPAC部署到LocalDB 2012,但它只是没有它:

堆栈跟踪如下:

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

Could not deploy package. (Microsoft.SqlServer.Dac)

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

   at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
   at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
   at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacDeployOptions options, CancellationToken cancellationToken)
   at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullable`1 cancellationToken)
   at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.Install()
   at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.RunAction()
   at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

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

Unable to connect to target server. (Microsoft.Data.Tools.Schema.Sql)

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

   at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnInit(ErrorManager errors, String targetDBName)
   at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor constructor)
   at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation() …
Run Code Online (Sandbox Code Playgroud)

localdb dacpac sql-server-data-tools visual-studio-2015

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

SSDT 项目中的参考系统对象

我在 VS 和 SSDT 中有一个 SQL Server 项目,并且正在编写一个必须引用系统对象(sys.tables、sys.all_columns 等)的存储过程。但是当我构建项目时,我收到大量警告,提示该过程“具有对 [sys].[tables] 的未解析引用”

有没有办法在引用中获取系统对象以避免这种情况?似乎如果项目属性具有任何最新 SQL 版本的目标平台,那么它应该知道这些系统对象已经固有地存在。

它不会停止构建,但会使寻找真正的警告(需要解决的警告)变得更加困难。

任何建议表示赞赏。谢谢。

sql-server-data-tools

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

SSDT表格模型数据加载/ID错误

我是 Visual Studio 的新手,我正在 Visual Studio 中构建我的第一个表格模型,已经使用 powerBI 一年左右了。

\n\n

我有一个带有数据表的 Azure SQL 数据库设置。我可以通过 SSMS、Power BI 等很好地访问数据库。当使用工作区服务器上的数据模型而不是与 VS 集成的工作区时,我也可以很好地访问数据。

\n\n

在集成工作区模式下使用模型时,当我在 Visual Studio 的表格项目中使用“通过电源查询获取数据”时,我可以正常登录数据库,我可以预览各种数据表并在电源查询/转换中打开它们等等。但是,当我尝试导入数据时 - 它可以通过处理的第一阶段 - 我收到以下错误

\n\n
\n

\xe2\x80\x9c无法将修改保存到服务器。返回错误:\'OLE DB\n 或 ODBC 错误:很抱歉,评估期间发生错误..\xe2\x80\x9d

\n
\n\n

这给我留下了一个带有列标题的表格 - 但没有实际的数据行。

\n\n

当我将数据模型恢复到工作区服务器(即集成工作区设置为 false)时 - 我可以上传/刷新数据。

\n\n

因此,我很高兴在工作区服务器上构建我的模型 - 然而 - 当我向这些角色添加角色和用户时 - 我无法使用工作区服务器 - 或者我收到 ID 错误 - 因为我使用的是 Azure AD。- 见下文

\n\n

在工作区数据库上打开模型时发生错误。

\n\n
\n

原因:无法将修改保存到服务器。返回错误:\n \'无法为 Azure Analysis Services 角色成员指定 ID:\n \'member@domain\'。

\n
\n\n

当我使用集成工作区(按照建议)时,此 ID 错误已修复,但随后我无法加载数据。

\n\n …

sql visual-studio sql-server-data-tools

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