在不覆盖数据的情况下更新 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)
执行它们中的每一个并使用最后执行的NewQuery
的DBVersionID
更新VID
。
从现在开始,无论何时添加新程序,都将它们添加到 AccessDB 中,并在每个实时客户端中替换 AccessDB 文件。
【讨论】:
哎呀!感谢您提供出色的解决方案。我希望这不会是一个如此混乱的解决方案。也许我需要重新考虑一下。 这是我在项目中通常会做的事情。相信我!!它不是那么混乱。当你实施它时你就会知道它。您可以创建、更改或删除表、列、过程等。在客户的系统上更新数据库也不会令人头疼。 抱歉,我并不是说您的解决方案不好。我的意思是,我希望 MS 已经涵盖了这一点,并且有一个与完整 SQL 版本保持一致的内置解决方案。 如果您有更好的解决方案,请在此处发布答案,我的朋友。这样我就可以习惯了。以上是关于在不覆盖数据的情况下更新 SQL LocalDB的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 有没有办法在不覆盖子视图的任何手势的情况下向视图添加手势?
如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?
是否可以在不关闭 .txt 的情况下使 StreamWriter 覆盖行?
如何在没有 SQL Server Management Studio 的情况下在 SQL Server Express LocalDB 中使用 Visual Studio 2013 创建两个表之间的关