SQL Union多表 - 其中substring(table_name)= x

时间:2016-11-02 15:31:38

标签: sql tsql sql-server-2012

Microsoft的Dynamics NAV具有一个功能,其中每个SQL表名前面都有公司名称,即

  • Company1 $ G_L Entry
  • Company2 $ G_L Entry
  • Company3 $ G_L条目
  • Company4 $ G_L条目
  • 等...

我想为以'$ G_L Entry'结尾的所有表创建UNION ALL(表列/类型相同),即不指定所有表。

这是因为,在任何时候,NAV用户界面的用户都可以添加/删除公司,而且我不希望每次发生时都更新我的查询。

任何指示都非常赞赏。

(使用SQL Server 2012)

2 个答案:

答案 0 :(得分:2)

您可以通过将表名与union all连接来构建动态sql(显然您需要列出列)

DECLARE @allEntryTables VARCHAR(MAX);

SET @allEntryTables = ( SELECT
                         STUFF((SELECT
                                 ' UNION ALL SELECT col1, col2, col3 FROM ' + name
                                FROM sys.tables
                                WHERE name LIKE '%$G_L Entry'
                                FOR XML PATH('')), 1, 11, ''));

EXEC (@allEntryTables);

答案 1 :(得分:0)

我猜你不知道你有多少个表,然后你需要先指定表列表。 你可以选择sys表。 例如:“SELECT * FROM sys.objects WHERE name LIKE'%$ G_L'和INSERT表名称为temp 这是你的表格列表。