【问题标题】:Selecting the same column from the same table multiple times in the same statement在同一语句中多次从同一个表中选择同一列
【发布时间】:2013-04-23 19:03:56
【问题描述】:

我正在使用 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 的连接 RecordSet,但在 C# 中效果不佳。我尝试了无数种解决方案都无济于事。

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

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

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

非常感谢

【问题讨论】:

  • 查询是否返回DataTable对象?
  • 是的,它最终会出现在绑定到 Infragistics UltraGrid 的 DataTable 中。

标签: c# sql sql-server duplicates


【解决方案1】:

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

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

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

【讨论】:

  • 我试过这个没有用。我为 2 个单独选择的列添加了别名。相反,如果我不在“*”之前的 2 个单独选择的列中为该列的第一次迭代起别名,c# 或 ADO.NET 会为“Select *”中的 2 个相应列起别名。然而并发冲突仍然存在。
猜你喜欢
  • 2014-05-04
  • 2013-02-28
  • 2020-07-12
  • 2021-01-05
  • 2015-09-25
  • 2012-07-03
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多