tl;博士:如何将平面文件中的“NULL”转换为 SSDT/SSIS 中的 NULL?
在 SSMS 中运行以下代码:
/* Run once
SET NOCOUNT ON
CREATE TABLE #source (DT DATETIME, DT2 DATETIME2)
CREATE TABLE #target (DT DATETIME, DT2 DATETIME2)
INSERT INTO #source
VALUES (GETDATE(),GETDATE()),(NULL,NULL),(GETDATE(),'9999-12-31 23:59:59')
*/
-- Cntl-Shift-F, results to CSV with headers
SELECT * FROM #source
-- Cntl-D, results to grid
INSERT INTO #target
SELECT * FROM #source
SELECT * FROM #target
-- Prep for next run
TRUNCATE TABLE #target
配置 SSMS 以将结果创建为带有标题的 CSV 文件:工具 --> 选项 --> 查询结果 --> SQL Server --> 结果到文本:逗号分隔下拉,选中在结果集中包含列标题。
您的输出将类似于:
DT,DT2
2017-11-16 10:09:31.997,2017-11-16 10:09:31.9970000
NULL,NULL
2017-11-16 10:09:31.997,9999-12-31 23:59:59.0000000
在SSDT中,配置一个平面文件连接,高级“选项卡”,将列类型设置为DT_DBTIMESTAMP for DT,DT_DBTIMESTAMP2 for DT2。
(附带问题:知道为什么 SSDT 总是会出错,并将两列都设置为 DT_DATE 吗?显然这些列有时间分量。)
在平面文件源中,配置 RetainNulls = True (尽管我认为这无关紧要,因为我没有真正的空值,即不包含数据的空白列。
如何让 SSDT 在 #target 中创建与在 SSMS 中获得的结果相同的结果?IOW,我需要将文本“NULL”转换为目标中的“正确”NULL。
我的偏好:
- 平面文件连接和/或平面文件源中的配置技巧,
- 派生列(我需要推导方面的帮助),
- 脚本组件。