在代码中创建数据库视图

本文关键字:数据库 视图 创建 代码 | 更新日期: 2023-09-27 18:36:00

所以我的任务是创建一个工具,让我们的用户创建他们自己的'工作清单',他们用它来处理他们的数据。 在我们的应用程序中,这些工作列表由SQL视图驱动,因此现在我的程序必须根据用户输入在数据库中动态创建视图。 我不喜欢这样,但现在我必须充分利用它,正在集思广益,找出解决这个问题的最佳方法。

基本上,我创建的每个视图都有一个类似的框架,它有几个总是被拉取的列和几个总是发生的联接。 根据用户输入,我可以添加其他 SELECT 列,以及额外的联接(如果需要访问添加的显示列)。

所以基本上现在我的代码看起来像这样...

string SQL = string.Format(@"CREATE VIEW {0}
                             AS
                             SELECT
                             Foo.A,
                             Bar.B,
                             {1}
                             FROM
                             Table
                             INNER JOIN Foo on Foo.ID = Table.FooID
                             INNER JOIN Bar on Bar.ID = Table.BarID
                             {2}", viewName, displayNames, extraJoins);
Database.ExecuteNonQuery(SQL);

出于显而易见的原因,我真的不喜欢这样。 但是,我似乎找不到使用 ADO 创建视图的参数化查询的等效项。 我也许可以创建一个存储过程来执行此操作,但即使这样似乎也很草率。 有没有合理的方法来做这样的事情,不会让我感到恶心? 我们也在使用MS SQL,并且必须支持早在2005年。

在代码中创建数据库视图

与 DML(如 SELECT/UPDATE/INSERT/DELETE )相反,DDL 中不支持参数(也见这里)。所以基本上你要么用动态SQL隐藏它,要么按照你描述的方式做......