我想在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查詢運行得很好
查詢中的哪一列現在返回NULL值?你聲明你正在遍歷一個服務器列表,當查詢生成一個NULL時,你連接了哪個服務器?我的假設是,你正在遇到與NULL連接的權限問題。 – billinkc
它們都是數字列。它也出現在它原來的服務器上出錯 – Henrov
@billinkc U是完全正確的! – Henrov