导入追加数据的新功能
在MSSQL中,导入数据是一项基本任务。它允许将数据从一个格式转换为另一个格式并存储在数据库中。现在,MSSQL 2019带来了新的功能,可以更方便地追加数据到现有表中。接下来,我们将探索这些新功能。
1.导入数据
MSSQL提供了一种简单而直观的方法来导入数据。使用BULK INSERT语句,可以从CSV文件或文本文件中导入数据。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
在上面的代码中,我们将数据从一个名为Table的表中导入。我们指定CSV文件的路径,并定义了分隔符和行终止符。
注意:导入数据的文件必须可读,并且必须在MSSQL服务器中的本地文件系统中。
2.追加导入数据
在MSSQL 2019中,BULK INSERT语句被改进以支持追加数据到现有表中。在旧版本的MSSQL中,如果您想将数据追加到现有表中,您需要使用INSERT INTO语句。但是,INSERT INTO语句的性能较低,并且在需要大量数据的情况下,它可能需要很长时间来执行。
现在,您可以使用以下代码将数据追加到现有表中。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
KEEPIDENTITY,
TABLOCK,
BATCHSIZE = 10000,
CHECK_CONSTRAINTS
);
上面的代码包含了几个新选项,这些选项用于支持追加数据功能。
3.新选项
3.1 KEEPIDENTITY
在旧版本的MSSQL中,如果对具有自增列的表运行BULK INSERT命令,则会更改自增列中的标识符,因为插入了新数据。但是,在MSSQL 2019中,您可以使用KEEPIDENTITY选项来保持自增列的标识符不变,如下所示。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
KEEPIDENTITY
);
3.2 TABLOCK
当您尝试追加数据到现有表时,您可能会遇到表被锁定的情况。这是因为INSERT INTO语句使用行级锁定,这意味着每个INSERT INTO语句将锁定每个插入的行。如果您需要导入大量数据,则可能会导致性能下降。在MSSQL 2019中,您可以使用TABLOCK选项以表级锁定方式运行BULK INSERT语句,如下所示。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
);
3.3 BATCHSIZE
BATCHSIZE选项定义将在每个事务中导入的行数。如果您使用默认的值,它将在每个事务中导入整个数据集。但是,如果您导入大量数据,您可能希望将数据分批导入以增加性能。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
BATCHSIZE = 10000
);
3.4 CHECK_CONSTRAINTS
CHECK_CONSTRAINTS选项将检查INSERTED数据是否符合表约束。如果检测到不符合该约束,则BULK INSERT命令将失败。
BULK INSERT [Table]
FROM 'C:\Data\File.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
CHECK_CONSTRAINTS
);
4.总结
MSSQL 2019为导入追加数据功能带来了巨大变化。新的选项和功能使得将数据追加到现有表中变得更加容易和快速。我们希望您在自己的MSSQL数据库中使用这些新功能。