在不覆盖数据的情况下更新 SQL LocalDB

Posted

技术标签:

【中文标题】在不覆盖数据的情况下更新 SQL LocalDB【英文标题】:Update SQL LocalDB without overwriting data 【发布时间】:2014-03-07 10:01:46 【问题描述】:

我正在开发一个 c#.net 站点,通过 Visual Studio 2013 使用 LocalDB。

我有一些存储过程,这些在未来可能会改变,但随着项目的发展肯定会有一些新的补充。

实时站点/服务器将定期收集新日期,因此将与开发副本不同步。此外,我有许多正在使用的存储过程,这可能需要在未来进行调整。随着项目的发展,肯定还会需要新的存储过程。

所以,我的问题是……如何在不覆盖实时站点数据库中的数据的情况下进行这些更改/添加?

作为后续.. 使用 SQL Express 的“完整”版本而不是 LocalDB 会更好吗???

【问题讨论】:

【参考方案1】:

我建议您在数据库中创建一个名为DBVersion 的表,其列VID。然后创建一个 MS Access DB(因为它更方便)并在其中存储新添加的程序:

AccessDB 中的表有以下列:

DBVersionID    NewQuery

创建新过程时,将其添加到 Access DB。例如:

DBVersionID    NewQuery
1              CREATE PROC BLABLABLA
2              ALTER PROC ASDF

每当应用程序启动时,

select NewQuery FROM AccessDB WHERE DBVersionID>(Select VID FROM DBVersion) 

执行它们中的每一个并使用最后执行的NewQueryDBVersionID 更新VID

从现在开始,无论何时添加新程序,都将它们添加到 AccessDB 中,并在每个实时客户端中替换 AccessDB 文件。

【讨论】:

哎呀!感谢您提供出色的解决方案。我希望这不会是一个如此混乱的解决方案。也许我需要重新考虑一下。 这是我在项目中通常会做的事情。相信我!!它不是那么混乱。当你实施它时你就会知道它。您可以创建、更改或删除表、列、过程等。在客户的系统上更新数据库也不会令人头疼。 抱歉,我并不是说您的解决方案不好。我的意思是,我希望 MS 已经涵盖了这一点,并且有一个与完整 SQL 版本保持一致的内置解决方案。 如果您有更好的解决方案,请在此处发布答案,我的朋友。这样我就可以习惯了。

以上是关于在不覆盖数据的情况下更新 SQL LocalDB的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 有没有办法在不覆盖子视图的任何手势的情况下向视图添加手势?

SQL:如何在不覆盖结果的情况下对表的同一列进行多次连接?

如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?

是否可以在不关闭 .txt 的情况下使 StreamWriter 覆盖行?

在不使用 SQL 游标的情况下插入行和更新表

如何在没有 SQL Server Management Studio 的情况下在 SQL Server Express LocalDB 中使用 Visual Studio 2013 创建两个表之间的关