我已经使用过几次部署后脚本,并且总是直观地使用构建操作“PostDeploy”,因为它就是这样。现在我第一次尝试按照脚本模板中的内置指令使用":r somescript.sql"
语法。
此行立即被标记为错误:
“':' 旁边的 SQL80001 语法错误”
我找到了将 PDS 设置为“无”的建议。这没有帮助,错误仍然存在。我在这里缺少什么?
我已将一个数据库导入 SSDT,其中包含对系统视图(特别是 sys.columns)的引用。问题是,当我构建项目时,我会收到有关未解析引用的警告
从我在 MSDN 论坛上看到的情况来看,它看起来可能是一个已知问题:http : //social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/5a7026bd-0602-42e6-a639- d73bed903c26
现在,我知道我可以关闭警告或忽略它,但是有人知道实际的解决方案吗?
谢谢
由于业务逻辑,我们需要在表中添加一个新列,以确保始终填充该列。因此,应将其添加到表中NOT NULL
。与之前解释如何手动执行此操作的问题不同,这需要由 SSDT 发布管理。
由于一些认识,我一直在用头撞墙一段时间来完成这个听起来简单的任务:
我听别人说的方法是直接更新表定义(这样schema刷新是一致的),写一个预部署脚本,将表的全部内容移动到一个包含新列填充逻辑的临时表,然后移动后部署脚本中的行。尽管如此,这似乎很危险,并且当它检测到一个 NOT NULL 列被添加到一个包含现有数据的表中时仍然会激怒发布预览(因为验证在预部署脚本之前运行)。
我应该如何添加一个新的、不可为空的列,而不会冒孤立数据的风险,或者在每次发布时使用固有风险的冗长迁移脚本来回移动数据?
谢谢。
我有一个将 BlockOnPossibleDataLoss 设置为 false 的 dacpac,但是当我使用 sqlpackage.exe 运行它时部署被阻止,告诉我“列 [a] 被删除,可能会发生数据丢失。”
但是,当我使用完全相同的部署配置文件并从 Visual Studio 2012 发布时,它会通过。
sql-server sql-server-2012 ssdt visual-studio-2012 data-tier-application
我有一个 SQL 数据库项目,我在它上面构建了我们的企业数据库。它使用 SSDT 的架构比较工具在内部和 AWS 托管的 SQL 服务器上部署了多次。
当我发布到运行 SQL Ent 2012 sp2 的 Azure Hosted Win 2012 Server 时出现的问题。它返回“比较完成。未检测到差异”。
我知道这是错误的,因为我可以打开企业管理器并将架构与 SQL 项目进行比较,并看到存在差异。
我发现有几篇文章讨论了 2014 版本如何破坏该工具,但这些文章存在版本差异。
[是的,我谷歌了这个。说是因为我忘记这样做而臭名昭著。] https://www.google.com/webhp?ie=utf-8&oe=utf-8#q=ssdt+data+compare+fail+to+detect+difference&start=10
我检查过的其他事项包括确保我的数据库帐户具有无限制的访问权限。我可以连接管理控制台。我可以连接本地程序。
最后确认有问题:
更新
我已经验证这与服务器明确有关,因为现在两台不同计算机上的两个不同用户遇到了完全相同的问题。
我刚刚将现有的 SQL Server 2008r2 生产数据库导入到 VS 2013 数据库项目中。
我现在遇到了一些错误
Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].
Run Code Online (Sandbox Code Playgroud)
我真的不需要我的 VS DB 项目来管理用户,但我担心如果它们不存在,它会在部署时尝试删除它们。
文件本身生成为
CREATE USER [mydbuser] FOR LOGIN [mydbuser];
Run Code Online (Sandbox Code Playgroud)
或者
CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];
Run Code Online (Sandbox Code Playgroud)
错误标记显示它专门用于Login。由于这是一个系统级对象,我可以理解它超出了 db 项目的范围。
我是否更喜欢将它们全部更改为
CREATE USER [mydbuser] WITHOUT LOGIN;
Run Code Online (Sandbox Code Playgroud)
或将CREATE LOGIN
子句添加到每个文件的开头?
删除登录引用似乎更简单,而完全删除用户将是最简单的。
我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?
我有一个现有的数据库,其中包含 schema 中的所有内容dbo
。我有一个 SSDT 项目,其中包含我使用架构添加到它的对象foo
我在项目中有一个看起来像这样的表:
CREATE table foo.a (
id INT NOT NULL
CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
desc NVARCHAR(50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
这取决于 dbo.a。dbo.a 有许多列是其他列的外键。其他人(维护默认架构的人)可能会更改 dbo.a。
我想简单地将 dbo.a 存储为:
CREATE table dbo.a (
id INT NOT NULL
CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)
Run Code Online (Sandbox Code Playgroud)
所以它在内部构建,但没有部署。那可能吗?
在比较架构后,在 SQL Server Data Tools (SSDT) 中,我只想更新我的一些更改(如屏幕截图中的红色圆圈所示)。
但是窗口中列出了许多其他更改,我需要手动取消选中所有其他项目。
是否有任何选项可以取消选中所有项目或反转选择项目?
我在一个大型 ETL 和 DW 项目中工作,我们将 TFS/源代码控制与 SSIS 和 SSDT 一起使用。
今天,我发现当 SSIS 包正在对数据库表执行 BULK INSERT 时,不可能对该数据库执行 SSDT 模式比较。这是不幸的,因为我们的一些软件包需要很长时间才能完成。我们想使用 Schema Compare 功能来检测数据库结构的更改,以便将它们保存在我们的 SSDT 项目中,以便对数据库进行版本控制。
深入研究一下,我发现 SSDT 中的 Schema Compare 函数执行一个 SQL 脚本,该脚本调用OBJECTPROPERTY()
数据库中表的系统函数。特别是在我的情况下,OBJECTPROPERTY(<object_id>, N'IsEncrypted')
当<object_id>
引用当前正在批量插入的表时,任何调用似乎都被阻止了。
在 Visual Studio 中,SSDT 架构比较只是在一段时间后超时,并声称未检测到任何差异。
SSDT 中是否有解决此问题的方法,或者我应该尝试提交 MS Connect 错误报告?
或者,由于 BULK INSERT 发生在 SSIS 包中,是否有某种方法可以在不锁定OBJECTPROPERTY
表上的调用的情况下进行此插入?编辑:在 SSIS OLE DB 目标中,我们可以从“锁定表”中删除复选标记,它按照它所说的做,但这在某些情况下可能会损害性能。我对允许 SSDT 架构比较完成其工作的解决方案更感兴趣,即使某些对象被锁定。
这似乎是一个愚蠢的问题,但我一直在研究模式迁移的开源解决方案,即 Liquibase 和 Flyway。
但是,我的老板告诉我 SQL Server Data Tools (SSDT) 可以完成同样的工作。我不确定是否同意,但我在互联网上几乎找不到直接将其与 Liquibase 和/或 Flyway 进行比较的内容。
我的观点是SSDT是SQL Server的开发、数据建模和设计工具,还支持模式比较(及其生成脚本)和源代码控制。尽管在模式迁移的某些方面可能与 Liquibase/Flyway 有一些重叠,但它解决了一个不同的问题。但作为整体架构迁移工具,Liquibase 和 Flyway 是完全专用的工具,而 SSDT 则更多用于数据库的设计和开发。
即使只是说没有比较并且 SSDT 本身根本不是模式迁移工具,任何意见也将不胜感激。