在SQl Server中的单个数据库中查询多个方案

时间:2016-12-16 17:56:30

标签: sql-server database

我有一个SQL Server数据库,它有几个方案都有相同的表存储客户端特定的数据。具体来说,它就像:

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

等等。
每个模式都有几个不同的表,但我只想访问一个相同的表,但动态更改客户端方案 主要目标是找到每个客户的总销售额。希望它有意义。

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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并返回其TotalSales。

答案 2 :(得分:0)

一个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**) + .....

但你必须知道所有模式名称。

我认为&#39; 总计&#39;是您想要获得的字段/列的名称。 并且&#39; 促销&#39;是的名称。

相关问题