标签: ssdt

为什么 :r SQLCMD 命令在部署后脚本中标记为错误?

我已经使用过几次部署后脚本,并且总是直观地使用构建操作“PostDeploy”,因为它就是这样。现在我第一次尝试按照脚本模板中的内置指令使用":r somescript.sql"语法。

此行立即被标记为错误:

“':' 旁边的 SQL80001 语法错误”

我找到了将 PDS 设置为“无”的建议。这没有帮助,错误仍然存​​在。我在这里缺少什么?

sql-server deployment ssdt visual-studio-2013

27
推荐指数
2
解决办法
2万
查看次数

在 SSDT 中引用系统视图?

我已将一个数据库导入 SSDT,其中包含对系统视图(特别是 sys.columns)的引用。问题是,当我构建项目时,我会收到有关未解析引用的警告

从我在 MSDN 论坛上看到的情况来看,它看起来可能是一个已知问题:http : //social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/5a7026bd-0602-42e6-a639- d73bed903c26

现在,我知道我可以关闭警告或忽略它,但是有人知道实际的解决方案吗?

谢谢

sql-server system-tables ssdt

22
推荐指数
1
解决办法
7875
查看次数

SQL Server - 向现有表添加不可为空的列 - SSDT 发布

由于业务逻辑,我们需要在表中添加一个新列,以确保始终填充该列。因此,应将其添加到表中NOT NULL。与之前解释如何手动执行此操作的问题不同,这需要由 SSDT 发布管理。

由于一些认识,我一直在用头撞墙一段时间来完成这个听起来简单的任务:

  1. 默认值不合适,不能是计算列。也许它是一个外键列,但对于其他列,我们不能使用像 0 或 -1 这样的假值,因为这些值可能具有重要意义(例如数字数据)。
  2. 在预部署脚本中添加列将在第二次自动尝试创建同一列时发布失败(即使预部署脚本被编写为幂等)(这真的很糟糕,否则我可以想一个简单的解决方案)
  3. 每次发生 SSDT 架构刷新时,在部署后脚本中将列更改为 NOT NULL 将被恢复(因此,至少我们的代码库将在源代码控制和服务器上的实际内容之间不匹配)
  4. 现在将列添加为可空,以便将来更改为 NOT NULL 在源代码管理中的多个分支/分支中不起作用,因为目标系统在下次升级时不一定都具有相同状态的表(并不是说这无论如何都是一个好方法 IMO)

我听别人说的方法是直接更新表定义(这样schema刷新是一致的),写一个预部署脚本,表的全部内容移动到一个包含新列填充逻辑的临时表,然后移动后部署脚本中的行。尽管如此,这似乎很危险,并且当它检测到一个 NOT NULL 列被添加到一个包含现有数据的表中时仍然会激怒发布预览(因为验证在预部署脚本之前运行)。

我应该如何添加一个新的、不可为空的列,而不会冒孤立数据的风险,或者在每次发布时使用固有风险的冗长迁移脚本来回移动数据?

谢谢。

null sql-server scripting ssdt

16
推荐指数
1
解决办法
5510
查看次数

sqlpackage.exe 忽略 BlockOnPossibleDataLoss?

我有一个将 BlockOnPossibleDataLoss 设置为 false 的 dacpac,但是当我使用 sqlpackage.exe 运行它时部署被阻止,告诉我“列 [a] 被删除,可能会发生数据丢失。”

但是,当我使用完全相同的部署配置文件并从 Visual Studio 2012 发布时,它会通过。

sql-server sql-server-2012 ssdt visual-studio-2012 data-tier-application

14
推荐指数
2
解决办法
1万
查看次数

将我的数据库项目与我的 Azure 服务器进行比较时,SSDT 架构比较失败

我有一个 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

我检查过的其他事项包括确保我的数据库帐户具有无限制的访问权限。我可以连接管理控制台。我可以连接本地程序。

最后确认有问题:

  1. 我创建了一个单一返回数字 1 的 SP。
    1. 为了测试,它可能一无所获。
  2. 创建 SP 后,我在所有实例上运行架构比较,除 Azure 服务器外的所有实例都显示了差异。

更新

我已经验证这与服务器明确有关,因为现在两台不同计算机上的两个不同用户遇到了完全相同的问题。

schema sql-server ssdt

12
推荐指数
1
解决办法
5049
查看次数

导入为 VS DB 项目后出现“未解析的用户引用”

我刚刚将现有的 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子句添加到每个文件的开头?

删除登录引用似乎更简单,而完全删除用户将是最简单的。

我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?

sql-server ssdt database-projects

12
推荐指数
3
解决办法
3万
查看次数

从 SSDT 部署中排除特定表

我有一个现有的数据库,其中包含 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)

所以它在内部构建,但没有部署。那可能吗?

deployment ssdt

12
推荐指数
2
解决办法
7651
查看次数

在 SSDT 中取消选中全部或反转选择的选项?

在比较架构后,在 SQL Server Data Tools (SSDT) 中,我只想更新我的一些更改(如屏幕截图中的红色圆圈所示)。

但是窗口中列出了许多其他更改,我需要手动取消选中所有其他项目。

是否有任何选项可以取消选中所有项目或反转选择项目?

固态硬盘

ssdt visual-studio-2015

12
推荐指数
1
解决办法
1455
查看次数

正在进行大容量插入时 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 架构比较完成其工作的解决方案更感兴趣,即使某些对象被锁定。

sql-server ssis ssdt

11
推荐指数
1
解决办法
693
查看次数

架构迁移:SQL Server Data Tools 与 Liquibase 和 Flyway

这似乎是一个愚蠢的问题,但我一直在研究模式迁移的开源解决方案,即 Liquibase 和 Flyway。

但是,我的老板告诉我 SQL Server Data Tools (SSDT) 可以完成同样的工作。我不确定是否同意,但我在互联网上几乎找不到直接将其与 Liquibase 和/或 Flyway 进行比较的内容。

我的观点是SSDT是SQL Server的开发、数据建模和设计工具,还支持模式比较(及其生成脚本)和源代码控制。尽管在模式迁移的某些方面可能与 Liquibase/Flyway 有一些重叠,但它解决了一个不同的问题。但作为整体架构迁移工具,Liquibase 和 Flyway 是完全专用的工具,而 SSDT 则更多用于数据库的设计和开发。

即使只是说没有比较并且 SSDT 本身根本不是模式迁移工具,任何意见也将不胜感激。

schema migration ssdt

11
推荐指数
1
解决办法
9254
查看次数