Sql server 将存储过程签入源代码管理:签入什么?

Sql server 将存储过程签入源代码管理:签入什么?,sql-server,version-control,stored-procedures,Sql Server,Version Control,Stored Procedures,我有一些SP需要进行源代码管理,但问题是我要添加什么 理想的是,我想要某种方式来纯粹获取SP的来源,然而我所能得到的只是修改、创建等脚本,这些脚本我不认为是原始来源。我能找到的最接近的方法是运行sp_helptext“mysp” 是否有某种方法可以完全获取SP的源 我正在运行SQLServer2008R2 编辑:我理解能够获取源代码管理中的内容并更新/部署SP的好处,但我坚决反对这一点。此代码在特定情况下非常有用,在进行diff以查看更改和通用性(违反DRY原则。例如,SQL Server 20

我有一些SP需要进行源代码管理,但问题是我要添加什么

理想的是,我想要某种方式来纯粹获取SP的来源,然而我所能得到的只是修改、创建等脚本,这些脚本我不认为是原始来源。我能找到的最接近的方法是运行sp_helptext“mysp”

是否有某种方法可以完全获取SP的源

我正在运行SQLServer2008R2

编辑:我理解能够获取源代码管理中的内容并更新/部署SP的好处,但我坚决反对这一点。此代码在特定情况下非常有用,在进行diff以查看更改和通用性(违反DRY原则。例如,SQL Server 2010有一种创建和删除SP的新方法..需要更新我所有SP的“源代码”吗?)。如果我想要这样的东西,我会更倾向于制作一个脚本,将SP部署到服务器上(例如deploydp_mysp prod)

有没有一种方法可以让SP了解其本质?或者它实际上存储为创建过程脚本

编辑2:

干杯,伙计们

我不反对版本控制设置和引用(或部署脚本,这在我看来是最好的类比),因为它们存在于一个地方,是可重用的优点。关于这一点,最糟糕的是相同的部署代码存在于许多地方,并且必须在许多地方维护。此代码与每个sp之间没有依赖关系,因此它会将cruft添加到每个sp。为什么我们不将通用部署代码添加到解决方案中的每个文件中,使它们可以自部署

无论如何,我想我们必须同意在这个问题上有分歧。我绝对是一个纯粹主义者,我不认为我想要的东西有多大的实际好处,但对我来说,对发展的高度关注是让它变得有趣的原因:)

没有人能比sp_helptext“mysp”更能帮助我接近我想要的东西(我猜这在这一点上是不可能的),也没有人能说服我应该检查其他东西,所以我将不回答这个问题


再次感谢。

在我看来,您希望将一个脚本置于源代码管理之下,该脚本包含一个
如果存在(…)drop
,然后是一个
创建过程,然后是必要的权限。通过这种方式,您可以完全恢复到进入源代码管理时存储过程的状态


请记住,sql语句本身并不是您应该跟踪的唯一内容。

在我看来,您希望将一个脚本置于源代码控制之下,该脚本包含一个
(如果存在)(…)drop
,然后是一个
创建过程
,然后是必要的权限。通过这种方式,您可以完全恢复到进入源代码管理时存储过程的状态


请记住,sql语句本身并不是您应该跟踪的唯一内容。

您有权访问Visual Studio 2010吗?他们将DB Pro与Developer edition合并,使您能够访问数据库项目和模式比较。使用这些工具,您可以轻松地以基于文件的格式提取所有表、视图、存储过程、用户定义函数等。然后可以将该数据库项目存储在源代码管理中。您甚至可以比较项目的不同版本,看看有什么变化,更不用说部署到服务器了


如果您没有这个工具,那么您需要编写程序脚本。在我以前的工作中,我们对create语句很满意。

您有权访问Visual Studio 2010吗?他们将DB Pro与Developer edition合并,使您能够访问数据库项目和模式比较。使用这些工具,您可以轻松地以基于文件的格式提取所有表、视图、存储过程、用户定义函数等。然后可以将该数据库项目存储在源代码管理中。您甚至可以比较项目的不同版本,看看有什么变化,更不用说部署到服务器了


如果您没有这个工具,那么您需要编写程序脚本。在我以前的工作中,我们对create语句很满意。

仅在VS2010(ultimate)中创建数据库项目,并将模式与本地数据库进行比较,并在TFS中维护存储库。这样做将维护对TFS中SP的所有更改

仅在VS2010(ultimate)中创建数据库项目,并与本地数据库进行模式比较,并维护TFS中的存储库。这样做将保留对TFS中SP的所有更改,我一直在保留用于创建存储过程的脚本。这样我就可以对它们进行源代码控制

我在每个存储的过程脚本中包括三个部分:

  • 在脚本顶部进行一点检查,以删除存储的进程(如果存在)(以GO结尾)

  • 创建存储过程(以GO结束)

  • 然后是存储过程的任何授权的列表。(暗含围棋)


  • 这种用于创建存储过程的脚本非常棒,因为您可以连续运行它几次,并且它总是可以正常工作,不会抛出错误或造成任何混乱。如果你开始使用这种技术,就会容易得多。如果您正在从现有的一组存储过程向后工作,则可以使用SSM生成创建脚本,只需使用选项在创建之前包含一个drop。您还必须确保在结束时添加授权,或者每次删除并重新创建存储过程时,用户将无法再访问它。

    我一直在做的事情是保留用于创建存储过程的脚本。这样我就可以对它们进行源代码控制

    我在每个存储的过程脚本中包括三个部分:

  • 在脚本顶部进行一点检查,以删除存储的进程(如果存在)(以GO结尾)

  • 创建存储过程(以GO结束)

  • 然后是存储过程的任何授权的列表。
    if not exists (select * from sys.objects where name = 'myProc' and type = 'P')
    begin
        exec('create procedure myProc as print ''stub''')
    end
    GO
    alter procedure myProc as 
    ....
    
    SELECT ROUTINE_DEFINITION 
    FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_NAME = '<sp_name>'