当数据从另一个表插入表时,将空字符串转换为NULL

时间:2014-08-06 10:49:07

标签: sql sql-server sql-server-2008 bcp

我坚持将数据从一个表插入另一个表并使用bcp将数据导出到csv文件中。问题是csv文本文件包含null而不是''空字符串。

当我从另一个表中将数据插入表中时,空字符串列被视为NULL。执行bcp命令会生成正确的文件。

我正在使用此命令导出bcp

bcp ClientReportNewOrder out "D:\Temp\Neeraj\TestResults\oOR.txt" -c -t"," -r"\n" -S"." -U"sa" -P"123"

这用于将数据插入表

insert into ClientReportNewOrder
    select * from ClientReportNewOrder_import

3 个答案:

答案 0 :(得分:1)

经过大量的头脑风暴,我找到了解决方案。

  1. 执行Insert声明

    insert into ClientReportNewOrder select * from ClientReportNewOrder_import
    
  2. 按以下Dynamic查询插入记录更新记录后。

    DECLARE @qry NVARCHAR(MAX)
    SELECT  @qry =  COALESCE( @qry + ';', '') +
    'UPDATE ClientReportNewOrder SET [' + COLUMN_NAME + '] = NULL 
    WHERE [' + COLUMN_NAME + '] = ''''' 
    FROM INFORMATION_SCHEMA.columns
    WHERE DATA_TYPE IN ('char','nchar','varchar','nvarchar') and   TABLE_NAME='ClientReportNewOrder '
    
    EXECUTE sp_executesql @qry
    
  3. 按照上述步骤,我已经解决了这个问题。

    如果有任何人有良好的技术达到相同的请发布。

答案 1 :(得分:0)

不确定bcp但是如果您正在使用SQL查询(INSERT .. SELECT构建)直接插入,如下所示

insert into ClientReportNewOrder
    select * from ClientReportNewOrder_import

然后,您可以使用ISNULL()COALESCE()功能解决此问题,如下所示(一个示例,考虑col3NULL

insert into ClientReportNewOrder(col1,col2,col3)
    select col1,col2,ISNULL(col3,'') from ClientReportNewOrder_import

答案 2 :(得分:0)

您可以在表“ClientReportNewOrder”上使用触发器。

您可以创建的触发器是“而不是”触发表并检查其中的值是否为空,然后您可以强制写入“”>

CREATE TRIGGER trgInsteadOfInsert ON dbo.Yourtable
INSTEAD OF Insert
declare @value varchar(55)
BEGIN 
 BEGIN TRAN

 if(@value is Null)
     begin
        Insert into Yourtable (Value) values (@value);
        COMMIT;
    End
End

希望这会有所帮助。