使用SQL Server 2014和SSIS,我在数据流中遇到以下问题:
数据来源:出现错误"无法转换该值 因为可能会丢失数据。"。
这是查询:
SELECT
ISNULL(M.ActiveLEDZones, '') [ActiveLEDZones__c]
, M.Weight [Weight__c]
, M.WeightStand [WeightStand__c]
, M.wifi [WIFI__c]
FROM [dbo].[ModelComparison] M
WHERE CAST(M.CreateDate AS DATE) >= '2012-01-01'
使用不同的我得到这些值:
ActiveLEDZones__c
3
126
28
36
12
9
384
72
tbd
128
8
2
14
6
NA
16
1
10
0
N/A
32
18
5
64
4
表格信息:
Source: varchar(5)
Target: nvarchar(5)
我在SSIS中使用数据转换:
答案 0 :(得分:0)
你必须考虑2分:
<强>第一强>
在查询中使用ISNULL(M.ActiveLEDZones, '') [ActiveLEDZones__c]
时,此函数不会占用原始列数据长度varchar(5)
,它会占用此查询中找到的最长可能导致类似问题,请尝试使用CAST
函数用于精确列数据长度。
CAST(ISNULL(M.ActiveLEDZones, '') AS VARCHAR(5)) [ActiveLEDZones__c]
其他测试
使用以下查询创建表并检查创建的表结构:
SELECT
ISNULL(M.ActiveLEDZones, '') [ActiveLEDZones__c]
, M.Weight [Weight__c]
, M.WeightStand [WeightStand__c]
, M.wifi [WIFI__c]
INTO tblTemp_1
FROM [dbo].[ModelComparison] M
WHERE CAST(M.CreateDate AS DATE) >= '2012-01-01'
以及
SELECT
CAST(ISNULL(M.ActiveLEDZones, '') AS VARCHAR(5)) [ActiveLEDZones__c]
, M.Weight [Weight__c]
, M.WeightStand [WeightStand__c]
, M.wifi [WIFI__c]
INTO tblTemp_2
FROM [dbo].[ModelComparison] M
WHERE CAST(M.CreateDate AS DATE) >= '2012-01-01'
您将看到tblTemp_1 [ActiveLEDZones__c]
列与tblTemp_1不同
[ActiveLEDZones__c]
<强>第二强>
您可以使用CAST(ISNULL(M.ActiveLEDZones, '') AS NVARCHAR(5))
代替ISNULL(M.ActiveLEDZones, '')
,因此源列将被重命为Nvarchar(5)
,无需使用Data Conversion Componenent
查询将是
SELECT
CAST(ISNULL(M.ActiveLEDZones, '') AS NVARCHAR(5)) [ActiveLEDZones__c]
, M.Weight [Weight__c]
, M.WeightStand [WeightStand__c]
, M.wifi [WIFI__c]
FROM [dbo].[ModelComparison] M
WHERE CAST(M.CreateDate AS DATE) >= '2012-01-01'