問題: OLEDB源在手機中具有空值。 目標表有電話NOT NULL DEFAULT 1234567 OLEDB目的地已經保持空值未選中當源值爲空時沒有設置SSIS默認值
據我讀到這裏https://msdn.microsoft.com/en-us/library/ms187887(v=sql.110).aspx
如果傳入的值爲NULL應插入列的默認值。
但沒有發生。我不想在SSIS中進行任何轉換。有人可以幫忙嗎?
問題: OLEDB源在手機中具有空值。 目標表有電話NOT NULL DEFAULT 1234567 OLEDB目的地已經保持空值未選中當源值爲空時沒有設置SSIS默認值
據我讀到這裏https://msdn.microsoft.com/en-us/library/ms187887(v=sql.110).aspx
如果傳入的值爲NULL應插入列的默認值。
但沒有發生。我不想在SSIS中進行任何轉換。有人可以幫忙嗎?
我相信答案是Keep Nulls選項工作的列必須從數據源中丟失。
創建表#tmpdel ( 一個INT NOT NULL默認0, b INT NOT NULL默認0 )
插入#tmpdel的(a)的值(1) - WORKS INSERT INTO #tmpdel( a,b)values(1,null) - FAILS
在您的數據流任務,在OLE_DB源,設置數據訪問模式設置爲「SQL命令」,寫出來的select語句如下
SELECT Column_A
,Column_B
,ISNULL(Phone, 1234567)
,Column_C
,Column_D etc.
FROM Source_Table
你可以寫在數據流SQL命令CASE語句任務:
select
CASE
when PhoneNumber IS NUll then '1234567' else table_name.PhoneNumber END as PhoneNumber,
from table table_name
我知道我可以做到這一點,但我仍然想知道爲什麼這不會發生「例如,如果數據文件中有一個空字段,則該列的默認值將被加載。「根據上面的文件 – sam
我知道我可以做到這一點,但我仍然想知道爲什麼不會發生這種情況。「例如,如果數據文件中有空字段,則默認值因爲該列被加載,而不是。「根據上面的文檔 – sam
另一個來源說同樣的事情...保留空 - 默認情況下,此設置是未選中的,這意味着在插入到目標表過程中將插入默認值(如果在目標列上定義了默認約束)如果NULL值來自該特定列的源。如果選中此選項,則目標表列的默認約束將被忽略,並且源列的保留NULL將被插入到目標中。參考https://www.mssqltips.com/sqlservertip/1840/sql-server-integration-services-ssis-best-practices/ – sam