SQL Server,从 CSV 导入。 “插入只读列“id”失败。”

作者:编程家 分类: sqlserver 时间:2025-09-06

如何使用 SQL Server 从 CSV 导入数据并处理"插入只读列'id'失败"错误

导入数据是在数据库中常见的任务之一,而 CSV 是一种常用的文件格式,用于存储和传输数据。在使用 SQL Server 进行数据导入时,有时可能会遇到"插入只读列'id'失败"的错误。这个错误通常是由于尝试向只读列插入数据而引起的。本文将介绍如何正确地从 CSV 文件导入数据到 SQL Server,以及如何解决"插入只读列'id'失败"错误。

1. 创建数据库表

在导入数据之前,首先需要在 SQL Server 中创建一个适当的数据库表来存储导入的数据。可以使用以下代码创建一个简单的示例表:

sql

CREATE TABLE MyTable (

id INT IDENTITY(1,1) PRIMARY KEY,

name VARCHAR(50) NOT NULL,

age INT,

email VARCHAR(50) READONLY

);

在这个示例表中,我们定义了一个只读列"email",这意味着我们不能向该列插入任何数据。

2. 导入数据

接下来,我们可以使用 SQL Server 的 BULK INSERT 语句来导入 CSV 文件中的数据。以下是一个示例代码:

sql

BULK INSERT MyTable

FROM 'C:\path\to\file.csv'

WITH (

FIELDTERMINATOR = ',',

ROWTERMINATOR = '\n',

FIRSTROW = 2

);

在这个示例中,我们使用 BULK INSERT 从名为 "file.csv" 的 CSV 文件中导入数据到 "MyTable" 表中。我们指定了字段分隔符为逗号,并且每行以换行符结束。FIRSTROW 参数指定从第二行开始导入数据,以跳过 CSV 文件中的标题行。

3. 处理"插入只读列'id'失败"错误

当尝试向只读列插入数据时,SQL Server 会引发"插入只读列'id'失败"错误。要解决这个问题,有两种方法可以尝试:

方法一:在插入数据之前,使用 INSERT 语句指定要插入的列,而不包括只读列。以下是示例代码:

sql

INSERT INTO MyTable (name, age)

SELECT name, age

FROM TempTable;

在这个示例中,我们使用 INSERT 语句将数据从一个临时表 TempTable 插入到 MyTable 表中。我们只插入了可写列"name"和"age",而没有包括只读列"email"。

方法二:如果需要向只读列中插入数据,可以考虑更改表结构,将只读列更改为可写列。以下是示例代码:

sql

ALTER TABLE MyTable

ALTER COLUMN email VARCHAR(50) NULL;

在这个示例中,我们使用 ALTER TABLE 语句将只读列"email"更改为可写列,并且允许为空值。

在本文中,我们介绍了如何使用 SQL Server 从 CSV 文件导入数据,并解决了"插入只读列'id'失败"错误。通过创建适当的数据库表、使用 BULK INSERT 语句导入数据,并采取适当的解决方法,我们可以成功地导入数据并避免这个错误。无论是选择插入部分可写列数据,还是更改只读列为可写列,取决于具体的需求和数据模型。