将Stored Proc检入源代码管理:检入什么内容?

问题描述

| 我有一些SP要在源代码控制下,但问题是我要添加什么? 理想情况下,我想要某种方式来纯粹获取SP的源,但是我所能获得的只是更改,创建等脚本,而我认为这些脚本不是原始源。我能得到的最接近的是运行sp_helptext \'mysp \'。 是否有某种方法可以纯粹获取SP的来源? 我正在运行sql Server 2008 R2。 编辑:我了解能够掌握源代码管理中的内容并更新/部署SP的有用性,但是我坚决反对。此代码在某些情况下很有用,与进行差异以查看更改和泛型无关(违反DRY原理。例如,sql Server 2010具有创建和删除sps的新方法。是否需要为所有SP更新\'source \'? )。如果我想要这样的东西,我会更倾向于制作一个将SP部署到服务器的脚本(例如,部署dp_mysp prod)。 有没有办法获得SP的勇气?还是实际上将其存储为创建过程脚本? 编辑2: 干杯们。 我不反对版本设置和引用(或部署脚本,这是最类似于IMO的版本),因为它们存在于一个地方并且是可重用的优点。关键的麻烦之处在于,相同的部署代码在许多地方都存在,并且必须在许多地方进行维护。此代码与每个sp之间没有依赖关系,因此它会增加每个sp的工作量。为什么不在解决方案中的每个文件添加通用部署代码,以便它们可自行部署? 无论如何,我想我们将不得不同意不同意这一点。我绝对是一个纯粹主义者,我认为我想要的东西并没有很多实际的好处,但是对我来说,对开发超级感兴趣是让它变得有趣的原因:) 没有人比sp_helptext \'mysp \'帮助我更接近我想要的东西(我想这是不可能的),或者说服我应该检查其他事情,所以我将不回答这个问题。 。 再次感谢。     

解决方法

在我看来,您要置于源代码控制之下的脚本将是一个脚本,其中包含一个“ 0”,后跟一个“ 1”,再加上必要的权限。这样,您可以完全恢复到输入源代码控制时存储过程的方式。 请记住,sql语句本身并不是您唯一需要注意的事情。     ,您可以访问Visual Studio 2010吗?他们将DB Pro与Developer版本合并,使您可以访问数据库项目和模式比较。使用这些工具,您可以轻松地以基于文件的格式提取所有表,视图,存储过程,用户定义的函数等。然后,您可以将该数据库项目存储在源代码管理中。您甚至可以比较项目的不同修订版以查看更改,更不用说部署到服务器了。 如果您没有此工具,则需要编写程序脚本。在我之前的工作中,我们对create语句感到满意。     ,仅在VS2010(最终版)中创建数据库项目,并与本地数据库进行架构比较,并在TFS中维护存储库。这样做将保留TFS中对SP的所有更改     ,在VS 2010之前,我曾经让脚本创建一个存根过程(如果尚不存在),然后使用实际代码“更改过程”:
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 
....
这样,在更新时,您将保留过程元数据-权限,创建日期等。此外,如果脚本中存在语法错误,则最终不会从数据库中删除过程的旧版本。     ,我一直做的事情是保留用于创建存储过程的脚本。只是为了让我可以将它们置于源代码控制之下。 我在每个存储的proc脚本中包括三个部分: 仔细检查脚本顶部,以删除存储的proc(如果存在)(以GO结尾) 存储过程的创建(以GO结尾) 然后是存储过程的任何授予的列表。 (隐含GO) 这种用于创建存储的proc的脚本非常有用,因为您可以连续运行几次,并且始终可以正常运行而不会引发错误或弄乱任何东西。如果您开始使用此技术,则容易得多。如果您要从现有的一系列存储过程中进行反向操作,则可以使用SSMS生成创建脚本,只需使用选项在创建之前添加一个drop。您还必须确保在结束时或每次删除并重新创建存储过程时添加授权,用户将无法再访问它。     ,如果我正确阅读了您的问题,则只需要存储过程的主体,而不需要“创建过程”位。让我尝试说服您,您想要整个事情。在胆量之前可能发生的几件事是: 一个“执行为”子句 存储过程的参数(及其默认值) 一个“重新编译”子句 所有这些都会影响存储过程的运行方式。     ,像大多数其他答复者一样,我不太同意要尝试执行的操作的理由-但是,如果确定要遵循这条路线,则可以从以下步骤中获取现有过程的最原始对象定义
INFORMATION_SCHEMA.ROUTINES
桌:
SELECT ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_NAME = \'<sp_name>\'
您可以使用任何喜欢的编程语言将其查询到文件中。 您会注意到,数据库引擎本身存储了
CREATE PROCEDURE...
我认为这种方法可能难以维护的原因之一是,值得记住在其中创建存储过程的会话的某些会话级别设置会影响sp功能的方式/是否如此。 XML功能对存储过程中ѭ6设置的影响-您将需要某种方式来记录/检索每个过程的这些设置。     ,您可能需要等待SQL 2011(Denali) Micheal Otey说: “ Juneau还可以分析一组更改并生成脚本,该脚本将更新数据库以及受开发环境中所做更改影响的所有对象。与Visual Studio一样,Junau也支持项目的概念,并且可以与源代码集成使用Team Foundation Server进行控制的最酷功能之一是Juneau能够立即跳转到列定义或显示给定列的所有引用。Juneau的目标之一是使开发环境与SQL Azure和本地一致版本的SQL Server。\“ http://www.sqlmag.com/article/sql-server/first-look-sql-server-code-named-denali \“ Juneau \”,SQL Server的VS2010 shell: http://blogs.msdn.com/b/ssdt/archive/2010/11/08/welcome.aspx