Sql server SQL Server源代码管理

Sql server SQL Server源代码管理,sql-server,version-control,Sql Server,Version Control,当我们第一次启动源代码管理时,开发人员只需编辑数据库中的脚本,就在发布之前,一个包含所有更改的大脚本将被执行。这非常有效,直到一个开发人员意外地删除了一个存储过程,所有的工作都丢失了 之后,我们将创建存储过程的所有脚本放在文本文件中,并将它们存储在源代码管理中。这里的问题是,开发人员有时会更新源代码管理或数据库中的存储过程,而忘记更新另一个存储过程 我的梦想是拥有一个系统,其中一个开发人员进入并检查一个存储过程。然后,在进行更改后,数据库将自动更新 这只是一个梦吗?什么是对SQL Server进

当我们第一次启动源代码管理时,开发人员只需编辑数据库中的脚本,就在发布之前,一个包含所有更改的大脚本将被执行。这非常有效,直到一个开发人员意外地删除了一个存储过程,所有的工作都丢失了

之后,我们将创建存储过程的所有脚本放在文本文件中,并将它们存储在源代码管理中。这里的问题是,开发人员有时会更新源代码管理或数据库中的存储过程,而忘记更新另一个存储过程

我的梦想是拥有一个系统,其中一个开发人员进入并检查一个存储过程。然后,在进行更改后,数据库将自动更新


这只是一个梦吗?什么是对SQL Server进行源代码管理的最佳方式?

在团队环境中,我认为源代码管理最适合SQL Server的方式是DBA使用签入代码定期构建数据库。它通常只需要丢失一个实例,因为在开发人员了解到签入代码意味着什么之前,它没有签入

希望这有帮助

比尔

我们最近一直在使用,我不得不说它工作得很好。所有存储过程都存储为文件,并签入和签出源代码管理,它有生成脚本等工具

此外,在过去,我们使用的脚本存储为文本文件,可以签入和签出源代码管理。规则是,您必须签出该文件,然后在例如ManagementStudio中编辑它,然后保存它,然后再签回。在每个存储过程脚本文件的顶部,它将删除现有的存储过程,然后使用CREATE语句创建一个新的存储过程(绕过CREATE/ALTER问题)。然后我们有了一个工具,可以按照正确的顺序运行所有脚本,从头开始构建一个空白数据库,然后我们使用RedGate的产品生成一个脚本,使现有数据库更新。我承认这很乏味

大约在同一时间,我与大约10名其他开发人员一起开发了一个系统,他们实施了严格的数据库更改管理过程。有很多很多应用程序都依赖于一组2或3个数据库。每当数据库模式必须更改时(我们这里只讨论表、列和视图),就会创建一个文档来解释更改,然后会有一个矩阵列出更改与我们认为它会影响的应用程序。然后文件被分发,并且必须由负责每个应用程序的人员进行审查,他们必须在应用程序中搜索可能受到影响的任何地方,等等。这是一个漫长而艰巨的过程,但它奏效了。然而,存储的进程只是作为文本文件存储在源代码管理中

在更遥远的过去,随着小型项目更像是以数据库作为数据存储的桌面应用程序,每次应用程序启动时,我都会:

  • 检查数据库是否存在,如果不存在,则创建它
  • 检查所有表是否存在,如果不存在,则创建它们
  • 检查所有列是否存在,如果不存在,则添加它们
每当我需要更改模式时,我都会在启动代码的末尾添加更多的代码,以便根据需要修改模式,同时注意迁移任何现有数据。这样做的好处是,您可以卸载并重新安装新版本的软件,它会自动将现有数据库升级到最新版本。安装、升级和维护是一个梦想。不过,这对于更“进取”的系统来说是行不通的


您可以通过采用ADO.Net实体或其他类似的实体框架来减少这些问题,如。这些是对象关系映射层。它们为数据库中的每个实体(表)自动生成类,包括每个列的属性等。然后它们允许您使用自定义逻辑扩展这些类。如果您不需要将业务逻辑放在存储过程中,而将它们放在实体类中,那么好处是它们是强类型的。因此,如果更改列的名称,或删除列并重新生成实体类,那么IDE或编译器将自动标记代码中断的所有位置。显然,所有的实体代码自然都在源代码管理中,其他的源代码也在源代码管理中。

我在一个环境中工作过,源代码管理是发布过程的一部分

DBA收到了发行说明,要求DBA从源代码管理中获取,然后从源代码管理中发布存储过程更改或SQL脚本。如果您可以让DBA参与进来,那么这是避免中止发布的一个好方法,因为您应该能够在UAT系统上预先测试SQL

如果数据没有发布到源代码管理中,那么它就不会被发布


集成分支用于发布代码。

我们一直使用SQL Server 2000附带的scptxfr实用程序将数据库脚本化为一个在源代码管理下存储的文件


我们在签入之前运行它,它将突出显示发生的任何可能性(无论预期与否)。它不随2005或更高版本一起提供,但是如果您有任何旧的2000安装,它仍然可以与新版本兼容。它可能会遇到复杂模式的问题,但这是一个很好的起点。当与源代码管理触发器或持续集成相结合时,它也可以成为一个自动过程。

关键是将prod的权限限制在少数个人,并坚持他们永远不会进行更改,除非从源代码管理调用脚本。在SQl Server的新版本中,您还可以设置DDL日志记录,以查明到底是谁将该表更改为不在源代码管理中的版本

当我们第一次在ou上使用源代码控制时