2009-02-19 130 views
10

在开发具有大量存储过程的应用程序时,是否应将它们存储在某种源版本控制系统(如源代码安全,TFS,SVN)中?如果是这样,为什么?有没有一种方便的前端方式来与SQL Server Management Studio做到这一点?是否应将源代码管理中的SQL存储过程存储?

回答

25

是的。所有的代码应该存储在源代码控制中。

简而言之,代码是代码和错误发生。很高兴能够回头看看随着时间的推移发生了什么变化,并能够回到这些变化。

我们必须手动将其添加到源代码管理系统,但您可以为Sql Server管理系统创建插件。我从来没有创建过一个自动将其添加到源代码管理,但我想你可以。此外,所有的代码都存储在sql表中,所以理论上你可以创建一个进程或其他东西来检查表并检索所有代码并自动提交。

更新:我会经常编写额外的代码来检查代码是否存在,以及它是否不创建填充程序,然后实际脚本执行并更改过程。

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE 
id = OBJECT_ID(N'[dbo].[SomeStoredProcedure]') AND 
OBJECTPROPERTY(id,N'IsProcedure') = 1) 

EXEC sp_executesql N'CREATE PROCEDURE [dbo].[SomeStoredProcedure] AS 

SELECT ''SPROC Template''' 

GO 

SET ANSI_NULLS ON 

GO 

SET QUOTED_IDENTIFIER ON 

GO 

ALTER PROCEDURE SomeStoredProcedure 

执行删除并重新创建将删除您为其设置的所有用户权限。

+1

而且我会添加表格定义,包括索引,键等等以及任何在应用程序生命周期中不会创建的“查找”数据。 – 2010-02-18 22:16:27

0

你应该。

据我所知,没有这样的工具来自动化这个过程。至少在五年前,当我考虑建设一个,似乎没有任何竞争。

+0

有工具,视觉工作室有一些内置的功能。但是,它几乎普遍不足。 我们会购买一个源代码许可证到第三方产品,并调整我们需要使其工作的额外产品。 – JohnFx 2009-02-19 22:06:40

0

我们存放在颠覆我们的特效,所有的SQL代码,包括DDL应以某种源代码控制库的

0

SP和表模式为此事的所有资产,应该是版本控制之下。在完美的世界中,数据库将从脚本构建,包括测试数据,作为CI过程的一部分。即使情况并非如此,拥有DB /开发人员也是一个很好的模式。通过这种方式,可以在不影响所有人的情况下在本地沙箱中尝试新想法,一旦变更被测试,可以检入。

Management Studio可以链接到源代码管理,尽管我没有经验这个。我们一直将我们的SP/schema作为文件进行跟踪。管理工作室可以自动生成更改脚本,这非常有用,因为对于任何有数据的表而言,表格删除/重新创建可能会过于沉重。

4

绝对是的。那么问题就变成了如何将它们存储在源代码管理中。您是否删除并重新创建存储过程或者只是改变,是否在脚本末尾或单独的脚本中添加权限。关于我觉得有趣的话题,有一段关于Coding Horror的文章。 Is Your Database Under Version Control?

0

SQL特效也肯定需要版本控制在项目中的其余代码相同的安全/福利。

4

我建议你确实存储它们。你永远不知道什么时候需要回滚,或者挖掘出你可能已经删除的逻辑。

这里有一个很好的方法,可以轻松地将你的存储过程存入文件,你可以将它们放入你想要的任何源代码控制中。

Stored Procedures to .sql files

7

Get your database under version control。查看Scott Allen的系列文章。

说到版本控制,数据库往往是第二甚至第三级公民。从我所看到的情况来看,那些从未想过在一百万年内没有版本控制地编写代码的团队 - 以及正确的做法 - 可能完全没有意识到需要围绕他们的应用程序所依赖的关键数据库进行版本控制。我不知道如何将自己称为软件工程师,并且在数据库的代码不完全与源代码控制严格相同的情况下保持直面。不要让这发生在你身上。在版本控制下获取数据库。

23

完全正面无问题没有例外在整个宇宙中的所有PERPETUITY是!

+3

sooo ...你说的是你认为这是一个好主意? :) – kemiller2002 2009-02-19 23:44:19

+0

..不要把它放在太好的一点。 – ConcernedOfTunbridgeWells 2009-02-20 00:06:58

0

正如其他人所说,是的,他们应该是。

我不知道使用SQL Server Management Studio执行此操作的简单方法,但是如果您还使用Visual Studio,则数据库项目是管理此操作的好方法。

1

绝对如此。 积极。

一组SP是一个接口,可能比结构更改更频繁地进行修改。 而且由于SP包含业务逻辑,所以更改应该存储在版本控制中以跟踪对逻辑的修改和调整。

将这些存储在版本控制中是编码级别组织成熟度的一个症状,并且是最佳实践。

4

存储存储过程是一个好主意。尽管这是一个痛苦。你是如何将所有这些东西变成颠覆的?你可以手动去做,但那么它很乏味,你最终根本就没有做。

我使用subsonic project的工具。

sonic.exe version /server servername /db databasename /out outputdirectory 

该命令将所有内容保存为2个文本文件。一个包含数据库模式,存储过程,用户帐户,约束和主键。另一个包含数据。

既然你有了这两个文件,你可以使用subversion(cvs,source safe)将它移动到源代码控制中。对于using The Command Line Tool (SubCommander)

2

SQL

更多信息是代码。所有代码都属于源代码管理。

就是这样。

0

如果你没有使用资产管理一起源控制,然后我说扔在源控制一切。图像,文字文件,整个shebang。不能失去它,总是可以反转对它的任何改变,如果有任何机器停机 - 没有任何损失。

1

绝对是。