问题描述
|
我有一些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