我们环境中的数据库由 2 个不同的环境/应用程序共享。在 2 个应用程序中,第一个应用程序 A 经常更新,而第二个应用程序 B 不经常更新。
所以这里的情况是当应用程序 A 用新代码更新时,主要是存储过程,它有时会影响和破坏第二个应用程序 B,它正在由另一个团队更新,而不是经常更新。我知道这不应该是处理它的正确方法,并且不同时更新两个环境可能是灾难性的。发生这种情况是因为应用程序 A 和 B 由不同的团队处理。
你将如何优雅地处理这种情况?
从应用程序 B 中,我可以采取的预防措施是 - 在代码中检索数据 - 检索数据时的最佳方法是检查空白/空列,以便如果应用程序 A 添加新列,它们可以被应用程序 B 忽略。在 SQL 中检索数据 - 在过程中,可以使用可选参数进行处理。
但是当 C# 代码调用一个过程时,我们应该传递参数值,如果添加了新参数,那么它就会中断。有没有办法确保如果缺少调用参数,那么它应该被忽略(来自 C# 或 SQL Server)?
我的研究表明——
我可以先从存储过程中检索参数列表,然后使用该列表调用过程以循环并检查参数是否存在。因此,即使应用程序 A 添加了新参数,它也可以由应用程序 B 自动处理。这可以使用 C# 中的 DeriveParameters 或 SQL 查询来获取参数列表。
更改所有 SPROC 以采用 CSV 格式的参数。并在 SPROC 中拆分它们并相应地使用它。对于数百个现有的存储过程来说,这听起来很糟糕。
再说一次,正如我所说 - 这看起来不是一个好的解决方案,如果你有类似的情况,你会如何处理它?那里有一个框架,我不知道哪个可以解决这种情况?
环境 - ASP.NET/C# 4.0,SQL Server 2008 R2
编辑 - 让我在这里改述一下并提供更多细节。
应用程序/团队 A 更改了代码,但只有 C# 代码被推出到生产中,而不是 DB 更改。这就是区别所在。并且数据库代码只会在下一个版本中使用。
应用程序/团队 B 拥有最新代码,但数据库更改尚未投入生产,仍使用旧数据库。