列重命名后(自动)更新SQL查询/视图

时间:2018-03-19 10:15:17

标签: c# sql-server

因此,在我解决问题之前,您首先必须了解问题的背景。

上下文

  

我在.NET(C#)中创建一个模块,用户可以在其中构建自己的模块   “意见”。视图是用户可以查看的内容。它可能是一个   表视图,图表视图,电子表格视图等。视图是基于   一个SQL查询。用户可以通过非常用户构建此查询   友好的GUI,也称为“查询构建器”。这个查询   正在存储在数据库中,因为用户想要打开他的   查看下一次并立即查看其中的数据。

问题:

  

可能是我们将来重命​​名某个专栏。意思是   数据库中存储的查询或视图也必须是   更新。

最好的办法是什么?

我做了什么/调查过:

我知道创建表视图可能更好,而不是将查询存储在表中。但这并不能解决我的问题。

可能的解决方案:

解决方案1: 创建数据库触发器。重命名列时,检查所有存储的视图,对查询进行子串,并将旧列名替换为新列。如果我使用表视图,我可以删除视图并重新创建它。

此解决方案的缺点:使用数据库触发器时可能会出现性能问题。

解决方案2: 列包含元数据。我能做的是将列id与当前列和表名一起存储在表中。 重命名列时,我遍历已保存查询中的所有列,检索元数据并检查列名是否仍与元数据中的列名相等。

解决方案3: 不要将查询保存在数据库中,创建一个引用数据库列的可序列化对象。这个解决方案的问题是你在代码级别解决它,而这是一个数据库问题。

有谁知道更好的解决方案吗?有没有办法在重命名列时自动更新视图或查询?

1 个答案:

答案 0 :(得分:0)

由于我使用的是NHibernate,最好的解决方案是3号。 使您的域名实体可序列化。

编辑数据库中的列时,您需要做的就是更改实体的映射。问题解决了。