我有一个SQL Server数据库,它有几个方案都有相同的表存储客户端特定的数据。具体来说,它就像:
[database1].[client1].[table1]
[database1].[client2].[table1]
[database1].[client3].[table1]
等等。
每个模式都有几个不同的表,但我只想访问一个相同的表,但动态更改客户端方案
主要目标是找到每个客户的总销售额。希望它有意义。
非常感谢任何帮助。
谢谢!
答案 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;是表的名称。