Sql server 从sys.database表等连接两列

Sql server 从sys.database表等连接两列,sql-server,windows-server-2008,Sql Server,Windows Server 2008,我正试图把两张桌子连接起来。一个是sys.databases表,另一个是每个数据库中定义的表 我试图从sys.databases表中收集每个数据库的名称和创建日期。[姓名]和[创建日期] 我试图查询的另一列来自另一个名为filesize的表,我想在该表上使用sum函数来计算每个数据库的大小 我遇到的问题是不断重复。应该只有大约40条记录出现 这是我的剧本: SET NOCOUNT ON DECLARE @DBNAME NVARCHAR(MAX) DECLARE @DBNAME1 NVARCHAR

我正试图把两张桌子连接起来。一个是sys.databases表,另一个是每个数据库中定义的表

我试图从sys.databases表中收集每个数据库的名称和创建日期。[姓名]和[创建日期]

我试图查询的另一列来自另一个名为filesize的表,我想在该表上使用sum函数来计算每个数据库的大小

我遇到的问题是不断重复。应该只有大约40条记录出现

这是我的剧本:

SET NOCOUNT ON
DECLARE @DBNAME NVARCHAR(MAX)
DECLARE @DBNAME1 NVARCHAR(MAX)
DECLARE @varSQL NVARCHAR(MAX)

DROP TABLE TEMPIMGCOUNTERSERVER3 
CREATE TABLE TEMPIMGCOUNTERSERVER3 
(DBNAME NVARCHAR(MAX),
TOTAL_IMGSIZE_IN_MBS INT,
CREATE_DATE DATETIME)

DECLARE DBNAME CURSOR FAST_FORWARD FOR
select name from sys.databases where [NAME] LIKE 'Z%' AND create_date between GETDATE()-9 AND GETDATE()-3
ORDER BY [Name]

--SELECT * FROM SYS.DATABASES ORDER BY CREATE_DATE


OPEN DBNAME

FETCH NEXT FROM DBNAME INTO @DBname
WHILE (@@FETCH_STATUS=0)
BEGIN

--SET @DBNAME1=('USE ['+ @DBNAME +']')
--EXEC SP_EXECUTESQL  @DBNAME1

Set @varSQL='INSERT INTO TEMPIMGCOUNTERSERVER3 (DBNAME, TOTAL_IMGSIZE_IN_MBS, CREATE_DATE) 
SELECT ''['+@DBNAME+']'' AS DBNAME, SUM(FILESIZE/1048576) AS TOTAL_IMGSIZE_IN_MBS, CREATE_DATE
    FROM SYS.DATABASES, ['+@DBNAME+'].dbo.tbldoc WHERE CREATE_DATE BETWEEN GETDATE()-9 AND GETDATE()-3
    GROUP BY NAME, CREATE_DATE' 
EXEC SP_EXECUTESQL @varSQL

FETCH NEXT FROM DBNAME 
INTO @DBNAME
END

CLOSE DBNAME
DEALLOCATE DBNAME

INSERT TEMPIMGCOUNTERSERVER3 (DBNAME, TOTAL_IMGSIZE_IN_MBS)  
SELECT 'TOTAL_IMGSIZE_IN_MBS', SUM(TOTAL_IMGSIZE_IN_MBS) AS TOTAL_IMGSIZE_IN_MBS FROM TEMPIMGCOUNTERSERVER3 

SELECT DISTINCT DBNAME, SUM(TOTAL_IMGSIZE_IN_MBS) AS TOTAL_IMGSIZE_IN_MBS, convert(VARCHAR(10), CREATE_DATE, 101) AS CREATE_DATE FROM TEMPIMGCOUNTERSERVER3
GROUP BY DBNAME, convert(VARCHAR(10), CREATE_DATE, 101)
HAVING SUM(TOTAL_IMGSIZE_IN_MBS/1048576) IS NOT NULL
ORDER BY DBNAME

在动态脚本中,只在
创建日期
上过滤
系统数据库

我认为您也应该通过
NAME
添加过滤,即在
WHERE
子句中添加如下内容:

'...AND NAME='''+@DBNAME+''' GROUP BY etc...'