在SQL Server中存储数据库架构版本的最佳实践? [英] Best Practices for storing a database schema version in SQL Server?

查看:210
本文介绍了在SQL Server中存储数据库架构版本的最佳实践?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个将部署在安装了SQL Server的生产PC上的应用程序。 我希望能够在我的数据库中存储和检索模式的一个版本。 我对能够实现这一目标的最佳实践感兴趣,主要目标如下:

  1. 能够存储和轻松检索数据库的版本号。
  2. 隐藏或更难被客户端找到和操作。
  3. 创建新版本时能够编辑/更改。
  4. 备份数据库或分离数据库将保留版本号以供取证。

我希望有一种方法可以将"版本"存储在元数据中,而不是存储在普通表中,后者可以通过系统存储过程访问/设置。

有什么想法或最佳实践吗?

编辑:我发现的一个可能很有前途的选择是使用SQL Server扩展属性,将分配给数据库的键|值与"SCHEMA_VERSION"和版本号放在一起。它没有加密(但它的值可能是加密的),也没有隐藏,但至少从我们的一些用户和现场人员浏览的实际DB结构中删除了(令我沮丧!:))

推荐答案

我是Red Gate的SQL源代码管理和SQL比较的产品经理。我们必须解决这个问题,因为我们的工具需要知道数据库的版本,以便选择适当的迁移脚本来构建完整的部署脚本。

我们考虑了版本表,这是最常见的自行设计的解决方案。然而,从我们的研究中我们了解到,用户希望保持数据库对象集‘不受污染’,因此我们选择了数据库级扩展属性。我们将其附加到脚本中,如下所示:

IF EXISTS (SELECT 1 FROM fn_listextendedproperty(N'SQLSourceControl Database Revision', NULL, NULL, NULL, NULL, NULL, NULL))
  EXEC sp_dropextendedproperty N'SQLSourceControl Database Revision', NULL, NULL, NULL, NULL, NULL, NULL
EXEC sp_addextendedproperty N'SQLSourceControl Database Revision', @RG_SC_VERSION, NULL, NULL, NULL, NULL, NULL, NULL

将数据库加载到SQL Compare中时,它会执行检查,以确保它声称的版本与源代码管理中存储的版本相对应。

希望这能有所帮助!

这篇关于在SQL Server中存储数据库架构版本的最佳实践?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆