从SQL Server获取准确编辑的数据

时间:2013-02-13 08:45:04

标签: sql sql-server database sql-server-2008

我有两张桌子:

  1. Articles(artID, artContents, artPublishDate, artCategoryID, publisherID)

  2. ArticleUpdated(upArtID, upArtContents, upArtEditedData, upArtPublishDate, upArtCategory, upArtOriginalArticleID, upPublisherID)

    用户登录应用程序并更新文章 (artContents)专栏的内容。我想知道:

    1. 用户对文章内容进行了哪些更改?

    2. 我想存储文章,原始版本和编辑版本的两个版本!

  3. 我应该怎么做以上两项任务:

    • 对表格进行必要的更改?

    • 获取(artContents)的精确编辑数据的查询。

      • (确切的编辑数据意味着,coloumns中可能有5000个字符,用户可以在列的中间或其他位置编辑200个字符,我想要在编辑之前和编辑之后精确编辑这些字符)

    注意:我使用ASP.NET和C#进行开发

2 个答案:

答案 0 :(得分:1)

您无法使用SQL进行精确编辑。您需要一个算法,例如文件上的Unix diff(适用于行级)。在角色级别,算法将是Levenshtein distance的一些变体。如果diff满足您的需求,您可以下载它,编写存储过程来调用它,然后在数据库中使用它。这将是相当昂贵的。

维护不同版本的问题部分要容易得多。我会在每条记录上添加两个colmnns​​ EffDateEndDate。您可以通过查找EndDate is NULL获取最新版本,并在任何给定时间查找活动版本。 Merge通常可用于维护此类表格。

答案 1 :(得分:0)

基本上这种需求类型需要自定义日志记录。

你所提供的例子,即“确切编辑的数据意味着,coloumns中可能有5000个字符,用户可以在列的中间或其他地方编辑200个字符,我想要精确编辑的字符,之前编辑和编辑之后“

可以让用户更新来自文本的不同位置的特定单词。

您可以使用http://nlog-project.org/进行日志记录,它是一种快速而强大的工具,通常用于执行.net日志记录。

你也可以看看 http://www.codeproject.com/Articles/38756/Two-Simple-Approaches-to-WinForms-Dirty-Tracking Asp.net Event for change tracking of entities What would be the best way to implement change tracking on an object

以上网址将清除一些空气,如何做到这一点。

您显然需要追踪并存储每个更改。