问题标签 [sql-server-data-project]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2373 浏览

sql-server-data-tools - SQL Server Data Tools - 如何将数据与架构一起保存?

我一直在使用 SQL Server 项目来管理数据库的结构。

首先我创建了项目,然后导入了一个数据库。

然后,当我需要更改架构时,比如更改字段名称,我在 SQL Server 项目中进行,然后使用架构比较选项将其发布到实际数据库。

我想更进一步来保存数据库需要的基本数据。比如说一个OrderType有 2 条记录“PHONE”、“WEB”的表

数据库的所有新实例都需要此数据。有没有办法将这些也保留在 SQL Server 项目中,以免它们丢失?

现在似乎唯一的方法是保留主数据库的实际副本以及其中的元数据,然后使用数据比较。但是,如果数据可以与模式同时发布,那么生成的数据库是完整的,那就太好了。

0 投票
2 回答
3330 浏览

c# - 从 SSDT 项目以编程方式创建 dacpac 文件

.dacpac是否可以从现有 SSDT 项目创建“新”文件?我希望能够在每次自动端到端测试之前重新创建数据库(拆卸 + 设置):

0 投票
0 回答
1075 浏览

powershell - DACPAC 版本号更改导致漂移但漂移报告为空

我正在使用 SQL Server 数据层应用程序对数据库进行源代码控制。我在 Visual Studio 中创建了我的 SQL Server 数据库项目,现在正在通过 powershell 自动部署 DACPAC。在使用 DacFx 服务部署方法测试部署选项时,我一直在尝试部署选项,特别是BlockWhenDriftDetected.

现在根据我的理解,当您将某种类型的 SQL Server 对象(表、函数、sproc 等)添加到 SQL Server 中的外部部署数据库后,在您将所述数据库部署并注册为数据层应用程序之后,就会发生数据库漂移。说服务器。尽管我一直在对此进行测试,但这种漂移检测似乎有点不对劲。

当我第一次部署/注册 DACPAC 时,当然一切都很好,没有漂移。然而,如果我唯一更改的是 VS 中我的数据库项目属性中的版本号,重建项目,然后尝试使用 DacFx 重新部署 DACPAC 文件,它会检测到数据库漂移。

要部署我的 DACPAC,我使用以下 powershell 代码:

更新版本号并重建后再次运行上述代码,我会得到漂移检测错误:

另外,为了让事情变得更加混乱,当我检查数据库漂移时......

我得到一个空报告,这意味着一切都应该没问题:

这是一个错误还是我错过了什么?我很想忽略整个漂移检测并强制对生产数据库进行严格访问,以试图限制事后的更改。任何帮助将不胜感激。

谢谢。

0 投票
0 回答
775 浏览

sql-server - SSDT 在 SET AUTO_CREATE_STATISTICS 上生成脚本产生语法错误

我正在使用 SSDT 中的“生成脚本”功能来创建数据库脚本。但是,根据 SSMS,当我执行脚本时,生成的脚本有语法错误。有错误的代码是:

错误是:

消息 102,级别 15,状态 1,第 208 行“增量”附近的语法不正确。消息 319,级别 15,状态 1,第 211 行关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。消息 102,级别 15,状态 1,第 211 行“立即”附近的语法不正确。

据我所知,生成的语法在 SQL Server 2012 CTP1 中已弃用。

我正在使用带有 SSDT 版本 14.0.609.18 的 Visual Studio 版本 14.0.25431.01 Update 3。我正在针对 SQL Server 11.0.6020 执行此脚本。

请注意,我能够从 Visual Studio 发布,从 Visual Studio 进行架构比较,通过 SSMS 或 VS 中的 DACPAC 升级应用此架构,并且我还能够通过 DacFx 应用构建的 DACPAC 而不会出错。我只在执行原始脚本时收到此错误。

如果我删除有问题的代码,它会按预期工作。我确实需要有一个特定案例的脚本。我只是想弄清楚为什么 SSDT 会创建错误的语法。我宁愿不必在部署之前对生成的脚本进行手动编辑的清单。

有没有人有任何想法?谢谢!

0 投票
1 回答
1660 浏览

sql-server - 在 Visual Studio 和 SQL Server 中按架构名称比较架构

我有一个带有默认架构和自定义架构的 SQL Server 数据库。因此,例如两个表可能是database.dbo.table1database.customschema.table2

我想将“customschema”保留在源代码控制之下,并且我已将其加载到我的 Visual Studio SQL Server 数据库项目中。

当我使用Tools -> SQL Server -> New Schema Comparison... 实用程序时,它会返回所有数据库模式的差异。

它会将所有“dbo”表显示为在数据库项目中不同/已删除,即使我不打算将它们保留在源代码控制下的项目中。

有没有办法限制结果以显示我的数据库项目与“customschema”对象的实际数据库之间的差异?

0 投票
1 回答
423 浏览

visual-studio-2015 - 类型或命名空间定义,或预期的文件结尾:在我的数据项目中 - 存储过程

我正在更新我的 VS 2015、ASP.NET MVC 项目以拥有一个包含我所有数据模型/表、存储过程等的数据项目。

当我构建(或重建)时,我在这个项目中有 1755 个错误,所有这些都是我认为是“类问题”的问题。但是,这些错误出现在我的存储过程文件 ( .sql) 上。我如何让 VS 意识到这些是.sql文件而不应该被视为类?

我的一些错误:

  • CS1022 C# 类型或命名空间定义,或预期文件结尾
  • CS0246 C# 找不到类型或命名空间名称“BEGIN”(您是否缺少 using 指令或程序集引用?) - 就像我的 SQL 语句中的 BEGIN
  • CS0103 C# 当前上下文中不存在名称“@Name”。- 在参数名称中
  • CS1003 C# 语法错误,预期为 ',' - 这个在注释掉的行中间

我已尝试更新 Properties -> Build Action to Compile(如某些站点上所建议的那样),但这并没有解决问题。

此外,该项目似乎对我有问题,包括声明中的架构,即:

它希望我只使用存储过程名称。这也适用于我的表声明/创建表语句。它在以下错误(斜体):

更新--- 对于那些感兴趣的人 --- 和新问题

要创建我的存储过程,在我的解决方案资源管理器中,我右键单击我的架构,并将鼠标悬停在添加并选择“存储过程...”,然后从我的工作 SSMS 数据库中复制/粘贴我的存储过程。当我在探索我的新数据项目时,我找到了“SQL Server 对象资源管理器”,发现我的存储过程都没有列在这个数据库项目下。我通过导航到我的数据库项目 -> 可编程性 -> 存储过程,右键单击 -> 添加新存储过程,重新添加了所有存储过程。我删除了所有初始存储过程,这消除了所有奇怪的错误。

以这种方式创建存储过程时,文件会自动填充

如果我使用包含的 [SCHEMA] 构建,我会收到错误消息

SQL71501:过程:[SCHEMA].[SPROC NAME] 对 Schema [SCHEMA] 有未解析的引用

我的表(和外键)也会发生同样的事情。

如果我从所有 [SPROC NAME]、[TABLE NAME] 等的开头删除 [SCHEMA],错误就会消失,但是在查看 SQL Server 对象资源管理器时,我所有的表、存储过程等都在架构 dbo。

如何让代码了解所有元素都在指定的模式中而不会出错?

0 投票
0 回答
1050 浏览

sql-server - 如何在 Sql Server 数据库项目中创建视图而不创建引用表

我正在尝试向 VS 2015 中的 Sql Server 数据库项目添加视图。该视图引用了两个未在项目中定义的表。所以,我的视图 DDL 看起来像这样:

数据库项目中既不存在 TableA 也不存在 TableB,但它们都存在于目标数据库中。我不想将它们添加到项目中,因为它们属于不同的应用程序,不应受此特定项目的控制,因为它只定义了目标数据库中表/视图的子集。由于错误,我无法编译我的项目:( Error: SQL71501: View: [dbo].[My_View] has an unresolved reference to object [dbo].[TableA].以及来自同一根本原因的一些进一步错误)

我尝试添加对主数据库的引用 - 不走运。

有没有办法规避这个错误?或者也许以某种方式在项目中添加对 TableA 和 TableB 的引用,而没有实际的 DDL 定义这些表?

0 投票
1 回答
1165 浏览

entity-framework - 来自数据库项目的脚手架 EF Core

如何直接从 Visual Studio SQL Server 数据库项目构建 EF Core?

首选以下解决方案:

这就是整个问题。以下是我更详细的情况,以便您可以提供替代解决方案:

尽管 MS 承认 EF Core 仍未准备好生产,但距离 EF 6 进展停止现在也有 3-4 年,而 EF Core 是唯一与 NETCore 兼容的 LINQ 代码类似路径。于是开始了标题为“所以你将使用 EF Core ”的传奇。

这部分是固执己见的,但对我来说(基于 25 年以上的企业软件设计和开发经验)Code-First 绝对不是初学者。对于小型的第一周应用程序概念来说这很好,但是我看不到可以集成约束、视图等的合理模式/流程/实践。如果没有内置视图,真正的业务应用程序最终会导致开发人员在 LINQ 表达式中重复逻辑基础到处都是,用静态字段乱扔代码以支持 LINQ-to-SQL 查询,使用 LinqKit 混淆微组合模式等。在没有约束的情况下,我们最终需要十倍的防御性代码来处理运行时错误,迅速开花的单元和集成测试,演示失败成为常态。要么我们的面向对象专家需要成为 SQL 专家,要么相反,我们大大增加了寻找和适当补偿工程师的难度。所有这些问题我在四年前与 Rowan Miller(他最近离开了 EF 团队,这对于短期解决方案来说并不是一个好兆头)进行了详细的交谈中指出。

Model-First(.edmx早期 EF 版本中的可视化设计器)显然不在讨论范围内,因为 MS 对此的解决方案是声称 Code-First 确实是 Model-First,然后洗掉他们的手。因此,EF Core 中不存在真正中立的方法,我们称其为“合同优先”。

所以,那次咆哮(对不起,沮丧)把我带到了 Database-First,因此Scaffold-DbContext. 我们的数据库架构目前是一个受修订控制的 Visual Studio SQL Server 数据库项目。除了一些已知的问题之外,必须采用我们的数据库模式(目前是我们的单点真相),从中重建一个实时数据库,然后从实时数据库反向生成代码,这似乎也很荒谬,所有这些都是我们构建过程的一部分只是为了验证数据库类型对齐。相反,我希望能够简单地检测更改并直接从数据库项目重新生成我的 DbContext 和相关实体。

SSDT 数据库项目似乎使类似数据库的对象在许多通常需要数据库连接的 UI 中可用。这让我认为使用数据库模式作为现有工具的来源可能很容易。例如,在连接字符串中使用元数据提供程序,对 EF Core 代码进行简单修改等。

SQL Sharpener “在设计时使用 SQL 文件作为事实源(例如在 SSDT 项目中发现的那些)生成[s]”,并被推荐作为以前版本 EF 的此问题的解决方案,但它确实不支持 EF Core。

SQLite 和 SQL Server Compact Toolbox刚刚添加了对直接从 .DACPAC 生成 EF 模型的支持,但它似乎依赖于EntityFramework Reverse POCO Code First Generator来实现该功能,该功能在其TODO List中突出显示“支持 EF Core” 。该项目的主要贡献者证实了这种不兼容性。

帮助?

0 投票
1 回答
2251 浏览

sql-server - 如何在 SQL 数据库项目中生成模式比较结果的脚本

我正在使用 SQL Server 数据库项目。比较架构后,我想生成更新的更改脚本,我将在生产数据库上运行该脚本以更新最新的表架构以及存储过程和函数等。

例如:

案例1:Employee表被更改

CASE 2:存储过程spGetEmployeeDetails被修改

0 投票
1 回答
1196 浏览

sql-server-data-tools - Visual Studio 中的 SQL Server 数据库项目 - 如何为新数据库构建结构

我想创建一个 SQL Server 数据库项目,其中创建了一个新数据库。这是我的项目的结构:

SQL Server 数据库项目结构

基本上,我想要 4 个表,所以我.sql为它们添加了 4 个脚本。

而且我还添加了预部署(用于删除现有数据)和部署后脚本(用于播种初始数据)。

预部署:

部署后:

  1. 但是每次我构建项目时它都不会被部署——只显示构建成功
  2. 此外,数据库创建脚本在哪里。
  3. 当我右键单击发布并选择生成脚本的选项时,主脚本中只有部署前和部署后脚本。-

右键单击项目-> 发布选项

这是生成的脚本 -

可以看出,这个用于发布的脚本中没有创建表脚本。为什么?这是解决我需要从头开始创建表的要求的正确方法吗?