SQL插入不同步

时间:2016-06-17 16:21:46

标签: sql sql-server sql-insert

我在这里有一些SQL会引发错误:

DROP TABLE HACP_TEMP_PIC_HCV_Imported;

CREATE TABLE HACP_TEMP_PIC_HCV_Imported
(
    HeadSSN varchar(255) NOT NULL,
    HeadFName varchar(255) NOT NULL,
    HeadMName varchar(255),
    HeadLName varchar(255) NOT NULL,
    ModifiedDate varchar(255) NOT NULL,
    ActionType varchar(255) NOT NULL,
    EffectiveDate varchar(255) NOT NULL
);

BULK INSERT HACP_TEMP_PIC_HCV_Imported
FROM 'C:\Work\MTWAdhocReport.csv'
WITH
(
    FIRSTROW = 11,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    ERRORFILE = 'C:\Work\Import_ErrorRows_HCV.csv',
    TABLOCK
);

UPDATE HACP_TEMP_PIC_HCV_Imported
SET HeadSSN = REPLACE(HeadSSN, '"', ''),
    HeadFName = REPLACE(HeadFName, '"', ''),
    HeadMName = REPLACE(HeadMName, '"', ''),
    HeadLName = REPLACE(HeadLName, '"', ''),
    ModifiedDate = REPLACE(ModifiedDate, '"', ''),
    ActionType = REPLACE(ActionType, '"', ''),
    EffectiveDate = REPLACE(REPLACE(EffectiveDate, '"', ''),',','');

DROP TABLE HACP_PIC_HCV_Imported;

CREATE TABLE HACP_PIC_HCV_Imported
(
    HeadSSN varchar(255) NOT NULL,
    HeadFName varchar(255) NOT NULL,
    HeadMName varchar(255),
    HeadLName varchar(255) NOT NULL,
    ModifiedDate varchar(255) NOT NULL,
    ActionType int NOT NULL,
    EffectiveDate varchar(255) NOT NULL
);

INSERT INTO HACP_PIC_HCV_Imported(HeadSSN, HeadFName, HeadMName, HeadLName, ModifiedDate, ActionType, EffectiveDate)
    SELECT
        LTRIM(HeadSSN),
        LTRIM(HeadFName),
        LTRIM(HeadMName),
        LTRIM(HeadLName),
        LTRIM(ModifiedDate),
        CONVERT(int, LTRIM(ActionType)),
        LTRIM(EffectiveDate)
    FROM 
        HACP_TEMP_PIC_HCV_Imported;

单步执行此操作,创建临时表并将CSV导入其中可以正常工作。更新表以删除EffectiveDate列中的引号和尾随逗号。创建新表适当的作品。

尝试将数据复制到第二个表格(并将ActionType转换为INT)时,我收到以下错误消息:

  

转换varchar值时转换失败' 4/07 / 2016'数据类型int。

该数据是ModifiedDate中的第二行值,因此在导入第一行后,这些列显然不同步。在最初导入临时表后,我仔细检查了所有数据是否在正确的列中。

有什么想法?我觉得我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:3)

评论太长了。

您的代码表明您正在使用"正确的" CSV格式,允许用双引号括起字段。这些分隔的字段可以包含逗号。这是Excel生成和读取的格式。

我的猜测是你在这样的分隔字段中有一个逗号,这就是放弃导入。

bulk insert无法正确读取此格式。具有讽刺意味的是,(至少)一个数据库确实在字段中使用逗号导入CSV格式的文件。

过去,当我遇到这个问题时,它只是在小文件上。我只是将数据加载到Excel中,然后使用制表符或竖条作为分隔符保存。这解决了我的问题。

我现在还不确定是否有更先进的解决方案。但我非常确定您的问题是某些字段在文本字段中嵌入了逗号。