我在SSDT 2012工作.我已经创建了一个DTSX软件包,我已经部署到没有安装SSIS的SQL Server.我的遗憾是这应该有效.
但是,我不断收到以下错误: 要在SQL Server数据工具之外运行SSIS包,您必须安装Integration Services或更高版本的派生列.
我不太确定这里发生了什么.有没有人对此有任何见解.我已经要求我们的DBA在机器上安装SSIS,但我只是在猜测.这可能行不通,如果可以,我想提前做到这一点.
感谢您的任何反馈.
我正在尝试发布一个数据库项目,该项目还包含一个分区函数.我的目标数据库有不同的(日期)值,我不想修改,虽然SSDT/SqlPackage总是试图重新创建分区函数,不用说 - 所有使用PF的表.
我检查了以下选项:IgnoreObjectPlacementOnPartitionScheme&IgnorePartitionSchemes(http://msdn.microsoft.com/en-us/library/aa833291 (v=vs.100 ) .aspx)但仍然获得了娱乐尝试.
同时运行VS2012(最新SSDT)和VS2013
我附上了一个示例项目来演示这种行为:http://www.fast-files.com/getfile.aspx? file = 73666
sql-server database-project database-partitioning sql-server-2012-datatools sql-server-data-tools
我们有一张桌子:
`CREATE TABLE dbo.Account (
AccountID INT NOT NULL PRIMARY KEY IDENTITY,
AccountName NVARCHAR(100) NOT NULL);
Run Code Online (Sandbox Code Playgroud)
我想添加一个PartnerAccountKey列并为其添加一个唯一约束(在我假设的部署后脚本中填充数据)
CREATE TABLE dbo.Account (
AccountID INT NOT NULL PRIMARY KEY IDENTITY,
AccountName NVARCHAR(100) NOT NULL,
PartnerAccountKey INT NOT NULL,
CONSTRAINT UK_Account_PartnerKey UNIQUE (PartnerAccountKey));
Run Code Online (Sandbox Code Playgroud)
问题是在我的部署后脚本运行之前创建了唯一约束,因此它出错.我没有看到如何在创建列和创建唯一约束之间填充数据.
我一直在阅读Visual Studio 2013的新Sql Server数据工具是多么精彩,以及有关新的localdb数据库服务器等等,所以我一直在尝试做我认为是整个事情的重点 - 在VS解决方案中嵌入本地测试/开发数据库,这样当我将项目签出到一个干净的目录中时,在新机器上,我可以运行我的应用程序,连接到解决方案中的数据库.
但我无法弄清楚如何做到这一点.
任何人都可以给我任何提示吗?或指导教程?
添加一些说明
有关如何在MSDN上的项目中包含localdb数据库的教程,在这里:
但是,不幸的是,它不起作用.我完全遵循了说明,这一切似乎都有效,直到我将解决方案文件夹移动到新位置,此时它丢失了对数据库的跟踪.
问题是连接字符串,它包含数据库创建时的绝对路径.哪个没用.我需要能够在任何机器上检查任何位置的项目,并让它在那里构建和运行.
<connectionStrings>
<add name="ConnectLocalData.Properties.Settings.SampleDatabaseConnectionString"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\dev\Experiments\LocalDbWalkthrough\SampleDatabaseWalkthrough\SampleDatabase.mdf;Integrated Security=True;Connect Timeout=30"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
显然,之前已经提出过这个问题:
在配置文件中使connectionstring的AttachDbFilename相对
但这个问题没有答案.
这可能是一个非常容易回答的问题,但是我在这里浪费时间试图研究愚蠢的小事情,所以我想我只是在这里提出问题。
我在VS2013中有两个项目的解决方案。主项目(启动项目)是一个针对DB的C#Winforms项目,第二个项目是具有该DB架构的SQL项目。
因此,我可以进行更改并构建SQL项目。我可以拍快照,畅游作品。我不能做的是运行该项目(该项目应将其发布到(localdb)调试项目中。如果单击run,它将运行默认的启动项目。
当然,我可以暂时将SQL项目设置为默认启动项目,然后运行,然后将主项目再次设置为默认启动项目。
当然,必须有一种方法可以构建SQL项目并将其立即发布到调试数据库,或者至少如上所述以更简单的步骤发布?
实际上,我最终想要的是如果有一个热键可以构建两个项目,将SQL项目发布到调试数据库并运行主项目。
如果我想让部署后脚本只运行一次脚本,有没有办法做到这一点?
我只想为我的数据库运行一次部署后脚本
我有一个 SQL Server 2005 DB 项目,我希望在 SQL Server 更高版本上的现有数据库上部署架构。我遇到的问题是我希望部署到的数据库上启用了更改跟踪,因此 SSDT 要做的第一件事就是禁用 CT。这带来了一个问题,因为我收到以下错误:
(43,1): SQL72014: .Net SqlClient Data Provider: Msg 22115, Level 16, State 1, Line 5 对数据库“Test”中的一个或多个表启用更改跟踪。在为数据库禁用更改跟踪之前禁用每个表的更改跟踪。使用 sys.change_tracking_tables 目录视图获取启用更改跟踪的表的列表。(39,0): SQL72045: 脚本执行错误。执行的脚本:
Run Code Online (Sandbox Code Playgroud)IF EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$(DatabaseName)') BEGIN ALTER DATABASE [$(DatabaseName)] SET CHANGE_TRACKING = OFF WITH ROLLBACK IMMEDIATE; END
为了解决这个问题,我创建了一个执行以下内容的 PreDeployment 脚本:
/* Run pre-deployment scripts to resolve issues */
IF(SELECT SUBSTRING(@@VERSION, 29,4)) = '11.0'
BEGIN
PRINT 'Enabling Change Tracking';
DECLARE @dbname VARCHAR(250)
SELECT @dbname = …Run Code Online (Sandbox Code Playgroud) 我注意到我们的SSDT项目通过TFS构建定义的构建要比通过本地开发工具箱上的VS 2013慢得多。
在构建服务器本身上,我可以在大约2分钟内通过VS 2013构建我们最大的SSDT项目。使用MSBuild在同一服务器上从命令行在完全相同的项目中构建大约16分钟的时间(即以与TFS构建定义相同的方式构建SSDT项目)
我已经从两种方法中收集了/ verbosity:diagnostic输出,但是我一生都看不到提供给MSBuild的参数有任何实质性的区别。
在VS 2013中,配置为Debug:AnyCPU。
我使用的MSBuild命令是:
msbuild / t:重建/ p:配置=调试/ p:平台= AnyCPU .sqlproj
我在较小的SSDT项目上尝试了相同的过程,并且在构建时间上也得到了类似的相对差异(例如,另一个项目在VS 2013中花费了10秒,而在MSBuild中花费了70-80秒)
我拥有VS 2013(12.0.40629.00 Update 5)和SSDT(12.0.60629.0)的最新版本
有没有其他人看到过这个问题,或者甚至有解决方案?
转向VS 2015是否可以解决问题?
编辑以回应评论并包含诊断信息-15-08-2016
谢谢你们给我的建议。
埃德,当针对MSBuild测试VS时,我使用了构建目标Rebuild,我相信它是Clean和Build的结合。在TFS构建定义中,我将“清理工作区”和“清理构建”设置为true,但是“获取源代码”步骤的时间仅为9秒。
史蒂文(Steven),dbmdl因素听起来确实很有希望。但是,在从解决方案中删除所有dbmdl文件之后,我再次尝试了测试,但是我得到的时间还是相同的(我验证了dbmdl文件没有在测试版本之间重新生成)。另外,在测试之前,我已经删除了所有bin和obj文件夹,只是为了消除VS构建缓存数据的任何可能性。
Cece,我已经有效地从这个问题中删除了TFS,因为在测试VS和MSBuild时,我在构建时间上存在差异。我认为,如果我能破解的话,TFS的构建时间也会被破解。您对花费时间在哪个构建步骤上有一个很好的了解。我不想在最初的文章中充斥过多的信息,但是现在是时候了:-)。我使用了/ clp:PerformanceSummary选项来获得花费时间的细分。
在下面的第1部分中,您可以看到“ SqlBuildTask”中的时间几乎全部花费了。很高兴知道,但是对查明问题不是很有帮助。
在第2和第3节中,我使用/ verbosity:diagnostic输出从两种构建方法中获得的信息
我看不到两个版本之间的任何实质性区别。两者都必须使用此DLL来执行该实际生成(MSBuild显式声明对此DLL的引用):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\\Extensions\Microsoft\SQLDB\Dac\130\Microsoft.Data.Tools.Schema.Tasks.Sql.dll"
Run Code Online (Sandbox Code Playgroud)
-------------第1节-------------
(使用/ clp:PerformanceSummary从MSBuild输出)
Project Performance Summary:
82518 ms P:\<snip>.sqlproj 1 calls
82518 ms rebuild 1 calls
Target Performance Summary:
0 ms BuildOnlySettings 2 calls
0 ms GetReferenceAssemblyPaths 2 calls
0 ms GetSqlSymbolsPath 1 calls
0 ms BeforeBuild 2 …Run Code Online (Sandbox Code Playgroud) 我正在删除带有数据的表中的一列xxx。DACPAC 正在生成如下检查。
IF EXISTS (select top 1 1 from [dbo].[xxx])
RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)
所有数据迁移均已在预部署脚本中完成。目前我已经手动注释掉了。
如何防止它自动生成?
我是第一次设置数据库项目,我正在尝试使用 Azure DevOps 进行构建/部署。我正在使用 Azure (windows-2019) 中托管的 MSBuild 任务进行构建。我正在使用在 SQL 服务器上运行的命令行任务从
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140.
在使用 SqlPackage.exe 部署期间,我收到 master 和 msdb 数据库的错误:
No file was supplied for reference master.dacpac; deployment might fail. When C:\Jen_DacpacTest\Artifact\whatever.dacpac was created, the original referenced file was located C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS\MASTER.DACPAC.
Run Code Online (Sandbox Code Playgroud)
我认为对 master 和 msdb 的引用是在构建和部署时解决的(因为它是路径的变量),但似乎并非如此。它似乎在构建期间弄清楚 $(DacPacRootPath) 是什么,并对生成到 dacpac 中的 model.xml 文件中的引用进行“硬编码”。proj 文件中的引用如下所示:
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\master.dacpac">
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\master.dacpac</HintPath>
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
</ArtifactReference>
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\msdb.dacpac">
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\msdb.dacpac</HintPath>
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
</ArtifactReference>
Run Code Online (Sandbox Code Playgroud)
如果 dacpac 被解压,那么它在 model.xml 文件中的样子如下:
<CustomData Category="Reference" …Run Code Online (Sandbox Code Playgroud)