Sql server 将存储过程签入源代码管理:签入什么?
我有一些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”更能帮助我接近我想要的东西(我猜这在这一点上是不可能的),也没有人能说服我应该检查其他东西,所以我将不回答这个问题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
再次感谢。在我看来,您希望将一个脚本置于源代码管理之下,该脚本包含一个
如果存在(…)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>'