【问题标题】:SELECT from table specified in another table - possible without dynamic SQL?从另一个表中指定的表中选择 - 可能没有动态 SQL?
【发布时间】:2011-09-09 08:56:11
【问题描述】:

我有一个数据库,其中包含不同产品的各种表的多个表。这些产品在所有表格中都有唯一的零件编号。

为了搜索所有表,我创建了一个视图,该视图在表中的所有常见字段中使用 UNION ALL。

一旦确定了一个部分,我需要根据数据所在的表选择所有列。视图包含一个字段,该字段指定数据所在的表。

我不确定如何完成最后一部分:

CASE 声明(我目前倾向于这个)

动态SQL(最好不要用这个,会涉及到SELECT *和其他讨厌的东西)

在客户端选择(客户端需要从任意表中选择,需要额外的权限,糟糕的设计?)

替代解决方案?

编辑:实际上,IF 语句是唯一有意义的语句。客户端不需要直接访问表。由于无论如何每个表中的列都不同,因此最好为每个表单独声明。

(我会将问题标记为已回答,但我对此没有足够的声誉)

【问题讨论】:

  • 这很讨厌,因为您不知道将返回哪些列,您不知道它们将按什么顺序返回,而且这违反了公司编码政策。
  • 所以如果你告诉它你需要什么就可以了?
  • 是的,通常情况下,这取决于您的具体公司政策
  • 你能从一个视图返回不同的列吗?它们不必是静态的吗?

标签: sql sql-server tsql


【解决方案1】:

我不确定我是否正确理解了你的问题。我的理解是你有视图,它使用 union all 从不同的表中选择数据。你可以在只创建视图时给出表名

从 table1 中选择 "table1",table1.a,table1.b.. 联合所有 从table2中选择“table2”,table2.a,table2.b .....

【讨论】:

  • 我已经有类似上面的声明了。问题是视图只返回公共字段。要获取非常用字段,您需要直接从特定表中请求它们。我只是不确定如何直接选择表格。视图返回表,所以我倾向于使用 CASE 语句来运行适当的选择查询(我不想要选择客户端)
【解决方案2】:

实际上,IF 语句是唯一有意义的语句。客户端不需要直接访问表。由于无论如何每个表中的列都不同,因此最好为每个表单独声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多