在同一语句中多次从同一个表中选择相同的列

时间:2013-04-29 23:51:43

标签: c# sql sql-server duplicates

我正在使用SQL Server后端将VB6应用程序转换为C#。该应用程序包括一个非常通用的查询编辑器,允许用户编写任何选择查询并在网格控件中可视地返回结果。有些表有几百列(设计很差,我知道,但我无法控制)。管理员用户的典型用例是

select * from A_Table_With_Many_Columns

然而,虽然他们希望能够查看所有数据,但他们对2列特别感兴趣,他们希望这些列显示为网格中的前2列(例如,而不是第67列和第99列),而是他们执行以下声明:

select First_Interesting_Field, Second_Interesting_Field, * 
from A_Table_With_Many_Columns

然后他们将去修改网格中的数据。但是,在保存此数据时,会导致并发冲突(DBConcurrencyException)。这与VB6连接的RecordSets一起运行良好,但在C#中表现不佳。我尝试了无数的解决方案无济于事。

  1. 有没有人知道如何以通用方式处理此异常? (请记住,用户可以在查询编辑器中键入任何选择语句或连接等)

  2. 有谁知道我如何操纵返回的列,以便删除列表中进一步显示的2列? (我的困难在于,如果数据库中的列名是EMail,那么我select Email, * from Blah返回的2个相关列为EMail,而ADO.NET或C#别名为EMail查询的*部分中的列EMail1,因此我无法将第二列检测为重复并将其删除)

  3. 有没有人有我没想过的替代解决方案?

  4. 非常感谢

1 个答案:

答案 0 :(得分:0)

实际上,您可以通过执行以下操作将所有变量重命名为email_userdefined:

选择First_Interesting_Field作为First_Interesting_Field_userdefined,Second_Interesting_Field作为Second_Interesting_Field_userdefined,* 来自A_Table_With_Many_Columns

将user_defined替换为您想要的任何内容,例如订单号或用户可接受的任何其他内容