4

对于需要跟踪其版本的类似客户,我有许多相同的 SQL Azure 数据库。据我所知,2014 年 11 月的 SQL Azure 不支持扩展属性,如果支持,我可以使用扩展属性来跟踪版本更改,如下所示:

http://wateroxconsulting.com/archives/versioning-in-your-sql-database#

我正在考虑通过制作一个 DDL 触发器来调整这个概念,该触发器改变了一个只包含版本控制注释的存储过程。

所以我的问题是关于策略的——存储过程是保存此类信息的最佳位置,还是有更好的位置在 SQL Azure 容器中存储文本版本信息?我不一定要向每个数据库添加一个表,因为这会削弱数据库的用途并为滑稽动作留下空间,并且它需要自己照顾和提供其表结构等。

我的后续问题是关于策略的——在 TSQL 中完全改变过程的最佳方法是进行字符串操作以附加注释文本?

谢谢。

4

2 回答 2

1

您似乎在问如何在存储过程中存储一些数据,这很奇怪,因为 SQL Server 是存储数据的绝佳工具,但不是存储过程。

我想说一个更好的策略是创建一个非常简单的表来存储您在评论中提到的信息,即

CREATE TABLE dbo.DatabaseVersion
(
    Date datetime,
    VersionNumber decimal(5,2),
    Description narchar(40)
);

并且只需在每个 DDL 触发器上向该数据库写入一个额外的行。

我会说你反对它的原因很渺茫,但也许你可以为这个元数据创建一个数据库模式,即

CREATE SCHEMA Metadata;

使表的目的明确并更改“dbo”。在上面的 DDL 中为“元数据”。一些权限可以防止滑稽动作,如果您需要注意表结构,最好将其作为一级数据表执行,而不是作为存储过程中的一些非结构化注释。

于 2015-04-22T22:13:10.780 回答
0

从某种意义上说,这似乎与“在 SQL Server 中创建全局静态变量? ”非常相似,即以晦涩的方式存储一些数据。

我认为功能在定义上都会更短:

CREATE FUNCTION [dbo].[fn_GetVersion]()
RETURNS NVARCHAR(100)
BEGIN
  RETURN N'YYYYMMDD-HHMM and a version number and 40 chars of text'
END

...在数据检索中:

Select [dbo].[fn_GetVersion]();

并且可以通过触发器中的动态 DDL 进行更新:

Exec ('ALTER FUNCTION [dbo].[fn_GetVersion]()
RETURNS NVARCHAR(100)
BEGIN
  RETURN N''YYYYMMDD-HHMM and version number and other 40 chars of text''
END')
于 2016-01-05T18:10:53.500 回答