当名称的一部分为时,SQL追加多个表

时间:2019-11-25 13:47:30

标签: sql sql-server

我想知道是否可以根据表名的一部分在一个查询之后追加查询。我们的SQL Server建立在基于国家/地区的数据库中,这意味着每个国家/地区都有自己的数据库。在每个国家/地区都有一家商店,我们在该商店中用邮政编码和商店名称命名。与该特定商店有关的所有表均以邮政编码和名称开头,后跟“ $”,然后表名称就会出现。

可以说名称的第一部分是“ NO6800 Store1 $”,它是动态部分。 之后,该表将被命名为“销售发票标题”,所有商店都相同。

我的问题是,如果我能够通过SQL查找所有表,其中包含值“ Sales Invoice Header”,并将所有查询自动附加到一个表中。如果可以的话,如果可以在全国范围内的数据库中找到它,那就太好了。

预先感谢您:)

2 个答案:

答案 0 :(得分:0)

研究查询sys.databasessys.tables系统表。它们包含一个name列,您可以使用常规的LIKE查询来查找数据库...

示例:

select * from sys.databases where name LIKE '%Norway'

select * from sys.tables where name LIKE '%Sales Invoice Header'

答案 1 :(得分:0)

可以做到的。

您需要标识所有表名(假设它们具有相同的结构),然后构建一个CTE查询,该查询将每个表的WITH部分选择语句与union all结合在一起,然后是您需要在其间运行的最终查询所有以CTE为目标的表格。

例如:

WITH CrossCountry_CTE (Col1, Col2, ColN)  
AS  
-- Define the CTE query.  
(  
    SELECT Col1, Col2, ColN FROM NO6800Store1$SalesInvoiceHeader
    UNION ALL
    SELECT Col1, Col2, ColN FROM XX0000StoreU$SalesInvoiceHeader
    UNION ALL
    ..
    SELECT Col1, Col2, ColN FROM YY0000StoreV$SalesInvoiceHeader
)  
-- Define the outer query referencing the CTE name. Random query here:
SELECT Col1, COUNT(Col2) AS TotalSales, ColN
FROM CrossCountry_CTE
GROUP BY ColN, Col1
ORDER BY Col1, ColN;