不同于SQL Server中NULL表示值是未知的(Unknown Value),沒有資料類型,但是,在SSIS中,NULL是有資料類型的,要擷取某一個NULL值,必須指定資料類型,例如,變量 Int32的“NULL值”是 NULL(DT_I4),預設值是0。對于變量和參數,不允許有NULL值,是以,NULL值是指預設值,如果變量或參數的值未被顯式設定時,SSIS使用預設值。對于Data Flow元件,SSIS保持源資料的NULL值。
一,Variable和Parameter的預設值
在SSIS中,變量不能被設定為NULL,在缺少值時,每種資料類型的變量都會使用預設值:
字元類型的預設值是空字元“”,資料類型是DT_WSTR;
數值類型的預設值是0;
Boolean類型的預設值是False;
DateTime的預設值是 “12/30/1899 12:00:00 AM”;
例如,變量varIntNull的Data Type是Int32,使用Expression:NULL(DT_I4) 為其指派,則該變量的預設值是0。
如果需要測試變量是否缺失值,可以将變量的值和變量資料類型對應的預設值進行比較,
例如:@[User::MyStringVar]=="",如果表達式傳回True,說明變量缺失值;如果表達式傳回False,說明變量有值。
二,在Data Flow Task中處理NULL值
在Data Flow中,NULL有Data Type,必須使用NULL(Data_Type)來擷取某個Data Type的NULL。要确定某個值是不是NULL,使用ISNULL(Data_Column),這個函數傳回值是boolean,如果傳回值是True,說明該資料是NULL。如果當ISNULL(Data_Column)傳回true時,替換該資料,可以使用如下語句實作TSQL Isnull 函數相同的功能:ISNULL(Data_Column)? DEFAULT_VALUE : Data_Column
例如,列City是varchar(10),當該列為null時,将其替換為字元串"Unknown",在Derived Column轉換元件中,增加一個新列,設定Expression是:
(DT_STR,10,1252)(ISNULL(City) ? "Unknown" : City)

三,故障排除
樓主曾經遇到一個錯誤:在向OLE DB Destination的中Columns[FullName]插入資料時,違反了完整性限制。
[OLE DB Destination [12]] Error: There was an error with OLE DB Destination.Inputs[OLE DB Destination Input].Columns[FullName] on OLE DB Destination.Inputs[OLE DB Destination Input]. The column status returned was: "The value violated the integrity constraints for the column.".
Integrity Constraint包括:域完整性限制,實體完整性和參考完整性,Columns[FullName] 不具有實體完整性限制(PK) 和參考完整性限制(FK),是以,違反的是域完整性限制。域完整性限制包括:CHECK Constraint,DEFAULT Constraint、NOT NULL Constraint(非空限制),Unique Constraint,排除 check,default,unique限制,違反的Integrity Constraint 就是 Not Null Constraint,即,違反Target Column不能為NULL 的限制。
Data Flow元件不會處理資料列的nullability,錯誤的Root Cause是OLE DB Source Component 傳回的列FullName 存在Null值,但是在OLE DB Destination 元件中,Target Table的列FullName不允許插入Null值,是以,違反了非NULL限制。SSIS在調用 bulk insert 指令插入資料時,SQL Server 檢測到資料插入操作違反了表的nullability,停止事務的運作,并向SSIS 報錯。
解決方法:
在資料源中修改,在資料源中,将NULL值替換成預設值;推薦做法,避免NULL值進入Data Flow;
在資料流中使用Derived Column轉換元件,檢測到NULL值後,将其替換成預設值;
修改Target Table Column的Nullability,使該列允許為NULL
本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。
本文轉自悅光陰部落格園部落格,原文連結:http://www.cnblogs.com/ljhdo/p/4910852.html,如需轉載請自行聯系原作者