【问题标题】:SQL Server Import Wizard treats NULL as literal string 'NULL'SQL Server 导入向导将 NULL 视为文字字符串“NULL”
【发布时间】:2013-06-25 10:10:13
【问题描述】:

当我尝试将.csv 逗号分隔的平面文件导入Microsoft SQL server 2008R2 64-bit instance 时,对于string 列,原始数据中的NULL 变为文字字符串"NULL"numeric 列我收到导入错误。有人可以帮忙吗???

【问题讨论】:

    标签: sql-server csv import null flat-file


    【解决方案1】:

    亲吻

    对其进行预处理,将所有“NULL”替换为“”。

    即 .csv 文件将具有

    ,,
    

    代替

    NULL,NULL,
    

    似乎为我做这项工作。

    【讨论】:

      【解决方案2】:

      将数据放入暂存表,然后使用 SQL 代码插入到生产表中。

      update table1
      set field1 = NULL
      where field1 = 'null'
      

      或者如果你想做很多领域

      update table1
          set field1 = case when field1 = 'null' then Null else Field1 End
            , field2 = case when field2 = 'null' then Null else Field2 End
            , field3 = case when field3 = 'null' then Null else Field3 End
      

      【讨论】:

      • 这是一个可怕的、可怕的解决方案。 "NULL" 是一个完全有效的字符串,与 null 不同,所以不要这样对待它。正是这样的事情给所有姓“空”的穷人带来了麻烦。
      • @Voo,你读过这个问题吗? Null 不是 OP 的有效值。
      • @HLGEM OP 也在讨论字符串列,并且没有说明“NULL”是否有效 - 只是“NULL”会在整数列中引发错误。
      • 哈,真是个死灵。我突然出现检查我的旧问题并看到了这个。 @Voo,虽然您是正确的,如果 NULL 是有效输入,这会导致问题,但在我的情况下,它不是并且丢弃这些值是正确的。
      【解决方案3】:

      添加到 HLGEM 的答案,我是动态执行的,我在这里加载到临时表中,所有列类型都是 VARCHAR,然后执行:

      DECLARE @sql VARCHAR(MAX) = '';
      SELECT @sql = CONCAT(@sql, '
          UPDATE [staging].[',[TABLE_NAME],']
          SET [',[COLUMN_NAME],'] = NULL
          WHERE [',[COLUMN_NAME],'] = ''NULL'';
          ')
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE [TABLE_SCHEMA] = 'staging' 
          AND [TABLE_NAME] IN ('MyTableName');
      SELECT @sql;
      EXEC(@sql);
      

      然后做:

      INSERT INTO [dbo].[MyTableName] ([col1], [col2], [colN])
      SELECT [col1], [col2], [colN]
      FROM [staging].[MyTableName]
      

      [dbo].[MyTableName] 定义了所需的列类型,这也会失败并告诉您类型转换错误...

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        相关资源
        最近更新 更多