在代码中创建数据库视图

时间:2012-05-30 18:25:17

标签: c# sql-server sql-server-2005 ado.net

因此,我的任务是创建一个工具,允许我们的用户创建自己的“工作清单”,用于处理他们的数据。在我们的应用程序中,这些工作列表由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年。

1 个答案:

答案 0 :(得分:1)

与DML(如SELECT / UPDATE / INSERT / DELETE)相比,有no support for parameters in DDL(另请参阅here)。所以基本上你要么用动态SQL隐藏在存储过程中,要么按照描述的方式进行...