2014-01-07 24 views
0

我想在SSIS中的OLE DB源連接器內執行一些SQL,它將獲得有關數據庫化的一些統計信息。在SSIS中使用子查詢結果爲NULL值

此查詢在SSIS中用於一臺服務器時運行良好。然而,現在我正在循環大量服務器和兩列應該(並且已經)生成整數的列,現在生成帶有數據類型四字節有符號整數[DT_I4]的NULLS。 這些是DataFileSizeMB和LogFileSizeMB。 我在這裏完全失敗...(一如往常在這裏轉身,它有點感覺就像失敗,只是不得不問);

這是查詢,它爲什麼不運行在SSIS中,它運行在SSMS?

SELECT  @@SERVERNAME as Server 
       ,getdate() as Meetmoment 
       ,name as Databasenaam 
       ,( SELECT CAST(ROUND(SUM(size), 0) AS float) AS Expr1 
        FROM (SELECT database_id, type, size * 8.0/1024 AS size 
          FROM sys.master_files) AS fs_2 
        WHERE  (type = 0) AND (database_id = db.database_id) 
       ) AS DataFileSizeMB 
       ,( SELECT CAST(ROUND(SUM(size), 0) AS float) AS Expr1 
        FROM ( SELECT database_id, type, size * 8.0/1024 AS size 
          FROM sys.master_files) AS fs_1 
        WHERE  (type = 1) AND (database_id = db.database_id) 
       ) AS LogFileSizeMB 
FROM   sys.databases AS db 
ORDER BY DataFileSizeMB DESC 

我改變了查詢

select @@SERVERNAME as Server, 
      getdate() as Meetmoment, 
      mdf.name as Databasename, 
      mdf.Size_MBs as DataFileSizeMB, 
      ldf.Size_MBs as LogFileSizeMB 
FROM 

(SELECT d.name, 
ROUND(SUM(mf.size) * 8/1024, 0) Size_MBs 
FROM sys.master_files mf 
INNER JOIN sys.databases d ON d.database_id = mf.database_id 
where type = 0 
GROUP BY d.name) as mdf 

LEFT JOIN 

(SELECT d.name, 
ROUND(SUM(mf.size) * 8/1024, 0) Size_MBs 
FROM sys.master_files mf 
INNER JOIN sys.databases d ON d.database_id = mf.database_id 
where type = 1 
GROUP BY d.name) as ldf on mdf.name = ldf.name 

但很可惜......它必須是別的東西............到哪裏找?

據我所見,除了在計算過程中,這些列始終是整數。我試圖改變所有相關的列,輸入和輸出浮動,但沒有區別。 早在查詢生成器的結果FOPR這些列是NULL其中SSMS查詢運行得很好

+2

查詢中的哪一列現在返回NULL值?你聲明你正在遍歷一個服務器列表,當查詢生成一個NULL時,你連接了哪個服務器?我的假設是,你正在遇到與NULL連接的權限問題。 – billinkc

+0

它們都是數字列。它也出現在它原來的服務器上出錯 – Henrov

+0

@billinkc U是完全正確的! – Henrov

回答

1

我的假設是您正在運行與NULL連接的權限問題。 - @billinkc 19小時之前

好,開溜.....這實際上是....原來我以前確實有SYS.DATABASES訪問帳戶,但SYS.master_files .....

我有事情要考慮;)

請參見下面的線程

我結束了創建創建創建插入在其上報告用戶有擁有db_datareader表從sys.master_files中的相關列的表工作的腳本。這是我在SYS中使用的查詢中使用的表格

0

我重寫了查詢,避免了所有的子查詢:這個人做的伎倆:

select  @@SERVERNAME as Server, 
      getdate() as Meetmoment, 
      sysdb.name as Databasename, 
      sum(datafile.Size* 8/1024) as DataFileSizeMB, 
      sum(logfile.Size* 8/1024) as LogFileSizeMB 
FROM SYS.DATABASES (NOLOCK) sysdb 
     left join SYS.master_files datafile on sysdb.database_id = datafile.database_id and datafile.type = 0 
     left join SYS.master_files logfile on sysdb.database_id = logfile.database_id and logfile.type = 1 
group by sysdb.name 
+0

不幸的是,它只在查詢生成器中運行,在執行包後我再次得到NULLS ......它必須對目標列做任何事情...... – Henrov