我们有一个包含约1000个存储过程的SQL Server数据库。我们从未使用过git来保留该代码(好吧,我知道)。
现在,当我们有三个数据库开发人员而不是一个时,我们想开始做所有正确的事情,因此我们希望所有代码都保存在git中。
我们恳请就该如何做提供建议。
到目前为止,我们看到了两种策略:
1。。只有一个文件可以保留所有程序
看起来像
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('my_procedure'))
BEGIN
DROP PROCEDURE my_procedure
END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].my_procedure ...
因此,运行此大文件将释放所有过程,并重新创建它们。
2。。每个存储过程中都有一个文件,与上面的操作相同
优点/缺点
第一种方法使我们拥有单个项目代码,您可以在其中始终看到更改任何过程的时间,原因和对象。因此,所有开发人员都会更改该单个文件并在冲突时合并。但是这种方法会在发布之日杀死所有PLANS,因此可能会减慢数据库(?)
第二种方法使我们可以更改单个过程而不会杀死所有其他过程。但是通过这种方法,我们将拥有1000多个文件,并且知道如何在发布的日期运行仅更改的文件。
感谢您的建议。
答案 0 :(得分:2)
签出SQL Server Data Tools。它将促进git repo交互和部署。
采用的方法是每个过程使用一个文件,并在部署时将要部署的版本与服务器上的实际版本进行比较,以生成diff脚本。它也适用于表,视图,函数等。
您还可以在几种不同的部署方法之间进行选择,包括生成更改脚本并手动应用它。
答案 1 :(得分:0)
但是采用这种方法,我们将拥有1000多个文件,并且知道如何在以下日期运行 仅发布更改的内容。
是的,甚至可以想象您有表更改。那你怎么办删除并重新创建所有表?
各种形式的标准方法是具有(手动或自动生成)更改脚本。我们这样做-用文件夹和运行号在git中检入它们,并具有一个同步机制,可以基本上检查尚未运行的并按字母顺序运行它们。