2011-02-01 10 views
0

我想加入两个表。一个是sys.databases表,另一个是每个数据库中定义的表。从sys.database表等加入两列

我想从sys.databases表中收集每个数据库的名称和它的创建日期。 [NAME]和[CREATE_DATE]

我试图查询的另一列来自另一个名为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 ''['[email protected]+']'' AS DBNAME, SUM(FILESIZE/1048576) AS TOTAL_IMGSIZE_IN_MBS, CREATE_DATE 
    FROM SYS.DATABASES, ['[email protected]+'].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 

回答

1

在您的动态脚本,你只CREATE_DATE过滤SYS.DATABASES

我想你应该NAME添加过滤过,即添加到WHERE条款是这样的:

'...AND NAME='''[email protected]+''' GROUP BY etc...' 
+0

这个工作...谢谢! – Jeff 2011-02-01 20:15:05