0

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

4

1 回答 1

1

与 DML(如SELECT/ UPDATE/ INSERT/ DELETE)相比,DDL 中不支持参数(也请参见此处)。所以基本上你要么将它隐藏在带有动态 SQL 的存储过程中,要么按照你描述的方式来做......

于 2012-05-30T18:33:03.867 回答