Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 比较数据库项目和数据库之间的数据_Sql Server_Database_Sql Server Data Tools_Database Project - Fatal编程技术网

Sql server 比较数据库项目和数据库之间的数据

Sql server 比较数据库项目和数据库之间的数据,sql-server,database,sql-server-data-tools,database-project,Sql Server,Database,Sql Server Data Tools,Database Project,因此,我喜欢SSDT附带的模式比较选项。我不熟悉使用它,它比我在开发人员机器上更新数据库模式时使用的任何其他方法都要有效得多 然而,我真正需要的是能够比较数据。是否有一个版本的数据库项目可以让我包含表数据?这将使设置新的开发人员机器变得更加容易,因为我们可以用正确的数据预先填充一些表,而不必担心单个脚本 请告诉我我错过了什么,有一个神奇的按钮,可以让我这样做 有一个在数据库之间比较数据的选项:工具| Sql Server |新数据比较。 您可以在此处阅读更多内容: SSDT项目仅用于数据库模式,

因此,我喜欢SSDT附带的模式比较选项。我不熟悉使用它,它比我在开发人员机器上更新数据库模式时使用的任何其他方法都要有效得多

然而,我真正需要的是能够比较数据。是否有一个版本的数据库项目可以让我包含表数据?这将使设置新的开发人员机器变得更加容易,因为我们可以用正确的数据预先填充一些表,而不必担心单个脚本


请告诉我我错过了什么,有一个神奇的按钮,可以让我这样做

有一个在数据库之间比较数据的选项:工具| Sql Server |新数据比较。 您可以在此处阅读更多内容:


SSDT项目仅用于数据库模式,不处理数据。当然,您可以将数据作为部署前/部署后脚本包含,但它没有编译,因此您无法对其进行比较。

我最终将Microsoft.SqlServer.DacFx NuGet包导入到我的C#解决方案中。这实际上让我可以利用VisualStudio模式比较背后的工具来创建内存中的DACPAC,然后将其部署到新的数据库名称


我在GitHub上发布了一个非常粗略的使用示例:

,它只允许我比较两个数据库。我需要一个数据库和数据库项目之间的连接。对不起,我读得太快了。我更新了答案。无法比较项目中的数据。您不会错过一个神奇的按钮。数据库项目实际上没有“包含数据”选项。最接近的方法是使用部署后脚本进行数据插入/更新,而这些不属于比较范围。但是,有一些工具可以在临时表中生成适当的insert语句,并从中运行MERGE语句。生成初始脚本后,添加新数据应该相对容易,除非您经常更改这些表中的数据。@PeterSchott在代码优先迁移之外,您可以执行部署后脚本吗?当然,您可以选择SQL脚本并运行它们,但只需执行部署前/部署后脚本,我想你应该看看发布选项,而不是推其他任何东西。我认为打开所有的排除选项是可行的,但我不会让它成为你的正常发布选项。。我们从未进行过代码优先迁移-我们总是先推数据库,并试图确保代码可以处理旧的或新的对象,禁止为存储的进程等设置新的参数。。可能需要更多关于您尝试执行的操作的详细信息。主要是,我们的数据库中基本上有驱动下拉列表和类似内容的字典。当我们启动一个新的开发人员时,我们必须让他们手动填写或从备份中恢复。如果我们可以在他们加载模式后进行数据比较,那就太好了。这样,如果我们添加新条目,他们也可以通过这种方式加载它们。这比跟踪维护脚本更有意义,但显然是不可能的。您研究过部署后脚本吗?我用RedGate的工具做了类似的事情,将一个表的数据脚本化到一个临时表中,然后对该临时表和永久表使用MERGE语句。它们是大型脚本,但可以工作。或者,对于新的数据库,考虑在插入/发布选项之后短路插入部分并使用BCP。当然,这取决于桌子的大小。