如何从 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