2015-07-21 54 views

回答

0

我相信答案是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

0

在您的數據流任務,在OLE_DB源,​​設置數據訪問模式設置爲「SQL命令」,寫出來的select語句如下

SELECT Column_A 
    ,Column_B 
    ,ISNULL(Phone, 1234567) 
    ,Column_C 
    ,Column_D etc. 
FROM Source_Table 
+0

我知道我可以做到這一點,但我仍然想知道爲什麼不會發生這種情況。「例如,如果數據文件中有空字段,則默認值因爲該列被加載,而不是。「根據上面的文檔 – sam

+0

另一個來源說同樣的事情...保留空 - 默認情況下,此設置是未選中的,這意味着在插入到目標表過程中將插入默認值(如果在目標列上定義了默認約束)如果NULL值來自該特定列的源。如果選中此選項,則目標表列的默認約束將被忽略,並且源列的保留NULL將被插入到目標中。參考https://www.mssqltips.com/sqlservertip/1840/sql-server-integration-services-ssis-best-practices/ – sam

0

你可以寫在數據流SQL命令CASE語句任務:

select 
CASE 
when PhoneNumber IS NUll then '1234567' else table_name.PhoneNumber END as PhoneNumber, 

from table table_name 
+0

我知道我可以做到這一點,但我仍然想知道爲什麼這不會發生「例如,如果數據文件中有一個空字段,則該列的默認值將被加載。「根據上面的文件 – sam