我想知道是否可以根据表名的一部分在一个查询之后追加查询。我们的SQL Server建立在基于国家/地区的数据库中,这意味着每个国家/地区都有自己的数据库。在每个国家/地区都有一家商店,我们在该商店中用邮政编码和商店名称命名。与该特定商店有关的所有表均以邮政编码和名称开头,后跟“ $”,然后表名称就会出现。
可以说名称的第一部分是“ NO6800 Store1 $”,它是动态部分。 之后,该表将被命名为“销售发票标题”,所有商店都相同。
我的问题是,如果我能够通过SQL查找所有表,其中包含值“ Sales Invoice Header”,并将所有查询自动附加到一个表中。如果可以的话,如果可以在全国范围内的数据库中找到它,那就太好了。
预先感谢您:)
答案 0 :(得分:0)
研究查询sys.databases
和sys.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;