【问题标题】:Trim Empty Space Before Bulk Insert在批量插入之前修剪空白空间
【发布时间】:2012-10-29 07:47:50
【问题描述】:

批量插入时如何修剪空白?我的样本数据如下:

| |100  |4000009|1000 |01    |                                   |201004471|          |28.01.1972|10.04.2012|300485|ABC 307.07B            |01   |                         |          |SSC |SSC  |CA02      |00   |      |0       |SESC    |COM  |01      |01   |00.00.0000|00.00.0000|FR1  |

【问题讨论】:

    标签: sql-server bulkinsert trim


    【解决方案1】:

    这可能不是最优雅的解决方案,但您可以批量插入临时表,然后将临时表中的修剪数据插入目标表。

    CREATE TABLE #temp
    (
        [field1] [varchar](20) NOT NULL,
        [field2] [varchar](100) NOT NULL
    ) 
    
    BULK
    INSERT #temp
    FROM 'C:\Temp\data.txt' 
    WITH
    (
    FIELDTERMINATOR = '|',
    ROWTERMINATOR = '\n',
    FIRSTROW = 1
    )
    GO
    
    Insert Into MyDatabase..TargetTable ([field1], [field2])
    Select RTRIM(LTRIM([field1])), RTRIM(LTRIM([field2])) From #temp
    
    Drop table #temp
    

    【讨论】:

      【解决方案2】:

      如果要插入字符串值,这种方法可能有用

          REPLACE('Original String', ' ', '')
      

      否则您可以使用动态 SQL,将所有插入内容放入字符串中,修剪并使用 sp_executesql 执行

          DECLARE @szSQL NVARCHAR(MAX)
          SET @szSQL = 'INSERT INTO YourTable(YourCol1, YourCol2, YourCol3)
          VALUES(YourVal1, YourVal2, YourVal3)'
          SET @szSQL REPLACE(@szSQL, ' ', '')
          EXEC sp_executesql @szSQL
      

      【讨论】:

        【解决方案3】:

        你可以这样做:

        1. 将数据插入您的表中
        2. 删除空格UPDATE yourTable SET FirstName = LTRIM(RTRIM(FirstName))

        【讨论】: