SSIS包放出太多列

时间:2014-09-16 21:23:54

标签: csv sql-server-2005 ssis

我正在使用DataLoader For SalesForce,它正在读取从SSIS包创建的平面文件。但是,有几行列出了太多列。我不明白一个简单的查询如何偶尔输出额外的列。有谁知道csv文件如何突然开始拍摄额外的列?这是查询(有20列(CSV))。

SELECT
dbo.SALESQUOTATIONTABLE.CUSTACCOUNT AS 'Account_Number__c',
dbo.SALESQUOTATIONTABLE.BUSRELACCOUNT AS 'Business_Relation_Number__c',
DIMENSION2_ AS 'Division__c',
QUOTATIONEXPIRYDATE AS 'Expiration__c',
PMF_NOOFITEMS AS 'Number_of_Items__c',
CREATEDDATE AS 'Quote_Date__c',
QUOTATIONID AS 'Quote_Number_Ext_ID__c',
QUOTATIONID AS 'Name',
PAYMENT AS 'Terms__c',
SALESGROUP AS 'Territory__c',
dbo.SALESQUOTATIONTABLE.BUSRELACCOUNT AS 'Account_CBusiness_Relation_Number__c',
CASE dbo.SALESQUOTATIONTABLE.QUOTATIONSTATUS
    WHEN 0 THEN 'Created'
    WHEN 1 THEN 'Sent'
    WHEN 2 THEN 'Confirmed'
    WHEN 3 THEN 'Lost'
    WHEN 4 THEN 'Cancelled'
    WHEN 5 THEN 'Won'
    ELSE 'Unknown' END AS 'Quote_Status__c',
'"' + REPLACE(NAME, '"', '') + '"' AS 'Contact_Name__c',
PHONE AS 'Contact_Phone__c',
dbo.CONTACTPERSON.EMAIL AS 'Contact_Email__c',
PMF_RFQRECEIVEDDATE AS 'Quote_Recieved_Date__c',
PMF_QUOTESENTDATE AS 'Quote_Sent_Date__c',
PGMNAME AS 'Program_Name__c',
OEM AS 'OEM_c',
(SELECT TOP 1(NAME) from USERINFO where SALESQUOTATIONTABLE.SalesTaker = USERINFO.NETWORKALIAS) as 'Pricing_Specialist_c'        
FROM
    dbo.SALESQUOTATIONTABLE LEFT OUTER JOIN 
    dbo.CONTACTPERSON ON dbo.SALESQUOTATIONTABLE.CONTACTPERSONID = dbo.CONTACTPERSON.CONTACTPERSONID
WHERE
    CREATEDDATE >= CONVERT(VARCHAR(10), GETDATE() - 30, 101)
    OR
    --Only update quotes that were created in 2013 or after
    (MODIFIEDDATE >= CONVERT(VARCHAR(10), GETDATE() - 30, 101)
    AND
    YEAR(CREATEDDATE) > 2012)

这里是平面文件: Flat File

从下面的图片中可以看出,框内有额外的逗号 enter image description here

2 个答案:

答案 0 :(得分:2)

你说你正在输出一个csv。您确定您的数据字段中没有逗号吗?这可以表现为"额外"读取csv文件时的列。或者你的" NAME"字段中有单引号和逗号,可能会破坏您的显式双引号?

使用" extra"查看记录。其中的字段和&追溯到您的源数据。第一个虚假值将告诉您破损的位置。

答案 1 :(得分:0)

平面文件连接管理器预览显示逗号作为Pricing_Specialist_c列的一部分,如果它认为逗号指示了其他列,则不会这样做。看起来预览器接受逗号是INSIDE,无论使用何种文本限定符。

如果你看一下记事本中的csv文件,我猜你会看到有些像这样结束的行:

..., 5360, 5363, ",Angela Young"

我没有使用“DataLoader For SalesForce”,但是如果它在双引号逗号之后添加一个单独的列,则可能忽略了文本限定符。您可以使用此工具使其识别当前的文本限定符。或者您可以让SSIS使用DataLoader For SalesForce更好地识别的不同文本限定符。或者,最后,您可以弄清楚为什么您的USERINFO.NAME列数据似乎包含虚假逗号,并尝试删除它们。

相关问题