在SQL Server中的单个数据库中查询几个方案



我有一个SQL Server数据库,该数据库的几个方案都带有相同的表格存储客户端特定数据的表。具体而言,就像:

[database1].[client1].[table1]
[database1].[client2].[table1]
[database1].[client3].[table1]

等等。
每个模式都有几个不同的表主要目标是为每个客户找到总销售额。希望这是有道理的。

任何帮助将不胜感激。

谢谢!

请使用以下脚本。它选择表中所有行的所有列。您还可以添加自定义列以及查询字符串中的条件:

DECLARE @Clients AS TABLE
(
    SeqNo INT IDENTITY(1,1),
    ClientName VARCHAR(255),
    Qry VARCHAR(MAX)
)
DECLARE @v_Min INT,@v_Max INT,@TempQry VARCHAR(MAX)
INSERT INTO @Clients
(
    ClientName,
    Qry
)
SELECT
    DISTINCT 
        TABLE_SCHEMA,
        Qry = 'SELECT * FROM [DatabaseName].['+TABLE_SCHEMA+'].['+TABLE_NAME+']'
    FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME IN ('Your Table Name')
SELECT
    @v_Min = MIN(SeqNo),
    @v_Max = MAX(SeqNo)
    FROM @Clients
WHILE ISNULL(@v_Min,0) <= ISNULL(@v_Max,0)
BEGIN
    SELECT
        @TempQry = Qry
        FROM @Clients
            WHERE SeqNo = @v_Min
    EXEC(@TempQry)
    SELECT
        @v_Min = ISNULL(@v_Min,0)+1
END
select 'Database 1' as Name, sum([db1].[dbo].table1.sales) as Total_Sales from [db1].[dbo].table1
union
select 'Database 2' as Name, sum([db2].[dbo].table1.sales) as Total_Sales from [db2].[dbo].table1

是最微不足道的例子。如果您有很多客户端,那么可以将数据库存储在哪里可以使用。在该数据库中,客户端数据库路径可以存储在table中:

客户端(ID,名称,dbpath,Totalsales)

然后,您可以创建一个存储过程,该过程将更新clients.totalsales,使用存储的函数,该功能将接收DBPath并返回其Teptalsales。

一个SQL语句

Select (Select **ifnull**(**sum**(**Total**),0) FROM **Schema1**.**sale**) + (Select **ifnull**(**sum**(**Total**),0) FROM **Schema2**.**sale**) + (Select **ifnull**(**sum**(**Total**),0) FROM **Schema3**.**sale**) + .....

,但是您必须知道所有模式名称。

我认为' total '是要获得总计的字段/列的名称。和' sale '是 table 的名称。

相关内容

最新更新