Vb.net 从多台服务器生成多个表的SQL报告

Vb.net 从多台服务器生成多个表的SQL报告,vb.net,sql-server-2008,Vb.net,Sql Server 2008,我又一次面临老板向我提出的问题 我创建了一个基于windows的小应用程序,它连接到多个MSSQL服务器,并连续运行此查询: DECLARE @Orderby AS VARCHAR(50) SET @Orderby = 'reserved_MB desc' SET nocount ON SET ansi_warnings OFF SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED CREATE TABLE #S ( [name] VARCHAR

我又一次面临老板向我提出的问题

我创建了一个基于windows的小应用程序,它连接到多个MSSQL服务器,并连续运行此查询:

DECLARE @Orderby AS VARCHAR(50)
SET @Orderby = 'reserved_MB desc'
SET nocount ON
SET ansi_warnings OFF
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

CREATE TABLE #S
(
  [name] VARCHAR(50) NULL ,
  [rows] VARCHAR(50) NULL ,
  [reserved] VARCHAR(50) NULL ,
  [data] VARCHAR(50) NULL ,
  [index_size] VARCHAR(50) NULL ,
  [unused] VARCHAR(50) NULL
)

-- Create a cursor to loop through the user tables
DECLARE @name VARCHAR(50)
DECLARE c_tables CURSOR
FOR
    SELECT  name
    FROM    sysobjects
    WHERE   xtype = 'U'

OPEN c_tables
FETCH NEXT FROM c_tables
INTO @name

WHILE @@fetch_status = 0 
    BEGIN
    INSERT INTO #S
            EXEC sp_spaceUsed @name
    FETCH NEXT FROM c_tables    INTO @name
END

CLOSE c_tables
DEALLOCATE c_tables

SELECT  [dSampleDate] = GETDATE(),
    [name] ,
    [rows] ,
    reserved_MB ,
    data_MB ,
    [index_MB] ,
    unused_MB
INTO    #T
FROM    ( SELECT    [name] ,
                [rows] = CAST([rows] AS INT) ,
                reserved_MB = CAST(REPLACE(reserved, 'KB', '') AS INT)
                / 1000 ,
                data_MB = CAST(REPLACE(data, 'KB', '') AS INT) / 1000 ,
                [index_MB] = CAST(REPLACE(index_size, 'KB', '') AS INT)
                / 1000 ,
                unused_MB = CAST(REPLACE(unused, 'KB', '') AS INT) / 1000
      FROM      #S
    ) AS XX
ORDER BY reserved_MB DESC 

DROP TABLE #S
DROP TABLE #T
如果运行正常,它会使用以下命令将其插入读卡器内的本地数据库:

INSERT INTO [DBGrowth] (sName, sTableName, iRows, iReservedMB, iDataMB, iIndexMB, iUnusedMB) VALUES('" & sDbName & "', '" & RDR2.Item("name") & "', '" & RDR2.Item("rows") & "', '" & RDR2.Item("reserved_MB") & "', '" & RDR2.Item("data_MB") & "', '" & RDR2.Item("index_MB") & "', '" & RDR2.Item("unused_MB") & "')
我把这一切都做得很好,而不是下面这些让我困惑。。 他希望我生成关于行数增加、数据文件增加和索引文件增加的每日报告。 到目前为止,我还无法找到解决方案,我创建应用程序的语言是Visual Basic.NET,我使用的是MSSQL Server 2008

在T-SQL或VisualStudio(基于应用程序)中生成结果的想法和技巧将非常有用

如果有人能为我指出正确的方向,我将不胜感激


你好,罗伯特。

您上面的T-SQL为您提供了一个良好的起点。您始终可以创建一个SQL Server代理,该代理每天运行上述SQL,并填充DBGrowth。这将为您提供正在查看的各种项目的历史视图。然后,您可以根据需要查询此DBGrowth表的摘要信息。

p.S.您需要在DBGrowth表上创建一个附加列。。。一个唯一的标识符,所以可能只是一个标识列。如果不同的数据库不在不同的位置,则会更容易,我执行此查询的程序总共必须连接到5台服务器,并查询大约15个表。如果允许,您可以添加一个链接服务器,以便能够查询其他服务器上的数据库。你熟悉这个吗。如果没有,则存在一个名为SP_AddLinkedServer的SP。一旦建立了这些连接,就可以查询其他服务器的内容。