【问题标题】: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】:
你可以这样做:
- 将数据插入您的表中
- 删除空格
UPDATE yourTable SET FirstName = LTRIM(RTRIM(FirstName))