我被要求为4个数据库中的每个表生成行计数,并将结果记录在第5个数据库中。
每个数据库1到4中的表列表完全相同。有时候,表格列表会根据用户的要求增加/减少,但所有4个数据库都会有完全相同的
在需要结果的Database_5中,他们只需要一个包含以下字段的表:
DateRun (Date row count run), Table_Name, DB1, DB2, DB3, DB4
字段DB1到DB4是要存储行计数结果的地方。
我知道如何链接服务器,我可以使用sp_msforeachtable。但我不知道如何从一个服务器获取表的列表到Table_Name,然后将所有4个数据库的记录计数填充到字段DB1,DB2,DB3& DB4
我猜测第一个查询需要生成一个表格列表&行从DB1计数并将其插入DB5。
然后从DB2中选择行计数并更新表名相同的DB5.DB2。
其次是来自DB3的行计数和更新DB5.DB3,其中表名相同。
重复DB4。
或者我弄错了。
查询是在DB5上运行还是我需要在每台服务器上运行查询然后插入到DB5中?我更愿意将所有内容保存在DB5上。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用CREATE TABLE #Results(
RunId INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
DateRun DATE NOT NULL,
Table_Name VARCHAR(100) NOT NULL,
DB1 INT NOT NULL,
DB2 INT NOT NULL,
DB3 INT NOT NULL,
DB4 INT NOT NULL
)
INSERT INTO #Results(
DateRun,
Table_Name,
DB1,
DB2,
DB3,
DB4
)
SELECT GETDATE()
,db1.name
,db1.DB1_Rows
,db2.DB2_Rows
,db3.DB3_Rows
,db4.DB4_Rows
FROM (
SELECT t.name
,p.rows AS DB1_Rows
FROM DB1.sys.tables t
INNER JOIN DB1.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN DB1.sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
) db1
full outer JOIN
(
SELECT t.name
,p.rows AS DB2_Rows
FROM DB2.sys.tables t
INNER JOIN DB2.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN DB2.sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
) db2
ON db1.name = db2.name
INNER JOIN
(
SELECT t.name
,p.rows AS DB3_Rows
FROM DB3.sys.tables t
INNER JOIN DB3.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN DB3.sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
) db3
ON db1.name = d3.name
INNER JOIN
(
SELECT t.name
,p.rows AS DB4_Rows
FROM DB4.sys.tables t
INNER JOIN DB4.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN DB4.sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
) db4
ON db1.name = db4.name
;
获取行数。这样你就可以一次性获得所有行数(没有循环,游标或其他流控制逻辑):
var data = { 7: { bezeichnung: "Sample 1", startdate: "2010-02-01" }, 52: { bezeichnung: "Sample 2", startdate: "2011-04-23" }, 53: { bezeichnung: "Sample 3", startdate: "2016-07-02" }, 65: { bezeichnung: "Sample 4", startdate: "2013-04-21" }, 84: { bezeichnung: "Sample 5", startdate: "2012-02-25" }, 85: { bezeichnung: "Sample 6", startdate: "2016-08-22" } },
result = { arr: Object.keys(data).map(function (k) {
return data[k];
}) };
console.log(result);
答案 1 :(得分:0)
您是否考虑过使用信息架构?这可能是一些动态SQL的最佳前进方式。在页面DYnamic SQL examples
上有一些关于此的好帖子