如何从 dat 文件在 SQL 服务器中执行批量插入?
How to perform bulk insertion in SQL Server from dat file?
我在 .dat
文件中的输入数据如下所示:
1| 2| 3| 4| 5| 6
11|22|33|44|55|66
最多 300 000 行
Dat 文件包含 6 列我需要添加一个默认列并执行批量插入 SQL 服务器
我该怎么做?
处理您的文件并将数据添加到临时文件 table (#temp
) 中,日期与文件中的日期相同。然后使用默认列的默认值从 #temp
table 插入原始 table。
DECLARE @BulkInsertSql AS VARCHAR(MAX);
SELECT
column1
,column2 INTO #BulkInsertTempTable
FROM OriginalTable
WHERE OriginalTable.id = 0; -- this condition is required to carry forward any identity columns
然后批量插入为
EXEC ('BULK INSERT #BulkInsertTempTable FROM ''' + @FileToProcess +
''' WITH (MAXERRORS = 0,FIELDTERMINATOR = ''|'',ROWTERMINATOR = ''\n'',FIRSTROW=2);')
然后从#temp table
插入到您原来的 table
SET @BulkInsertSql =
'INSERT INTO OriginalTable
(column1,
column2,
defaultcolumn3
)
SELECT
#BulkInsertTempTable.column1,
#BulkInsertTempTable.column2,
'defaultvalue' FROM #BulkInsertTempTable'
EXEC (@BulkInsertSql);
为您的问题添加示例执行代码
CREATE TABLE Whosebug_data (
no VARCHAR(50)
,Name VARCHAR(50)
,id VARCHAR(50)
,state VARCHAR(50)
,address VARCHAR(50)
,testdate DATETIME2(3)
);
SELECT sd.no
,sd.Name
,sd.id
,sd.state
,sd.address
INTO #stack_data
from Whosebug_data sd
WHERE sd.no = 0
BULK INSERT #stack_data FROM '\test\others\input.dat' WITH (FIRSTROW = 1, ROWTERMINATOR = '\n', FIELDTERMINATOR = '|', ROWS_PER_BATCH = 10000)
insert INTO Whosebug_data (no, Name, id, state, address, testdate)
SELECT sd.no
,sd.Name
,sd.id
,sd.state
,sd.address
,'10-Dec-2014'
FROM #stack_data sd
我在 .dat
文件中的输入数据如下所示:
1| 2| 3| 4| 5| 6
11|22|33|44|55|66
最多 300 000 行
Dat 文件包含 6 列我需要添加一个默认列并执行批量插入 SQL 服务器
我该怎么做?
处理您的文件并将数据添加到临时文件 table (#temp
) 中,日期与文件中的日期相同。然后使用默认列的默认值从 #temp
table 插入原始 table。
DECLARE @BulkInsertSql AS VARCHAR(MAX);
SELECT
column1
,column2 INTO #BulkInsertTempTable
FROM OriginalTable
WHERE OriginalTable.id = 0; -- this condition is required to carry forward any identity columns
然后批量插入为
EXEC ('BULK INSERT #BulkInsertTempTable FROM ''' + @FileToProcess +
''' WITH (MAXERRORS = 0,FIELDTERMINATOR = ''|'',ROWTERMINATOR = ''\n'',FIRSTROW=2);')
然后从#temp table
插入到您原来的 table SET @BulkInsertSql =
'INSERT INTO OriginalTable
(column1,
column2,
defaultcolumn3
)
SELECT
#BulkInsertTempTable.column1,
#BulkInsertTempTable.column2,
'defaultvalue' FROM #BulkInsertTempTable'
EXEC (@BulkInsertSql);
为您的问题添加示例执行代码
CREATE TABLE Whosebug_data (
no VARCHAR(50)
,Name VARCHAR(50)
,id VARCHAR(50)
,state VARCHAR(50)
,address VARCHAR(50)
,testdate DATETIME2(3)
);
SELECT sd.no
,sd.Name
,sd.id
,sd.state
,sd.address
INTO #stack_data
from Whosebug_data sd
WHERE sd.no = 0
BULK INSERT #stack_data FROM '\test\others\input.dat' WITH (FIRSTROW = 1, ROWTERMINATOR = '\n', FIELDTERMINATOR = '|', ROWS_PER_BATCH = 10000)
insert INTO Whosebug_data (no, Name, id, state, address, testdate)
SELECT sd.no
,sd.Name
,sd.id
,sd.state
,sd.address
,'10-Dec-2014'
FROM #stack_data sd