在SQL Server中,只有在使用列列表并且将IDENTITY_INSERT设置为ON时,才可以为表中的标识列明确指定值。

6 浏览
0 Comments

在SQL Server中,只有在使用列列表并且将IDENTITY_INSERT设置为ON时,才可以为表中的标识列明确指定值。

我正在尝试执行以下查询:

INSERT INTO dbo.tbl_A_archive
SELECT *
FROM SERVER0031.DB.dbo.tbl_A

但是即使我运行了以下命令:

set identity_insert dbo.tbl_A_archive on

我仍然收到以下错误信息:

只有在使用列清单并且IDENTITY_INSERT打开时,才可以为表'dbo.tbl_A_archive'的标识列指定显式值。

tbl_A是一张非常大的表,它有很多行和列。我不想手动输入所有的列。我该如何解决这个问题?

0
0 Comments

问题:在SQL Server中,只有在使用列列表且IDENTITY_INSERT为ON时,才能为表中的标识列指定显式值。

原因:该问题的出现是因为在插入数据时,未使用列列表或IDENTITY_INSERT没有设置为ON,导致无法为标识列指定显式值。

解决方法:可以通过以下步骤解决该问题:

1. 使用SQL Server Management Studio时,可以右键单击“对象资源管理器”中的表,选择“脚本表为” -> “选择为” -> “新建查询编辑器窗口”,这样可以自动生成列列表的查询语句。

2. 如果没有使用SQL Server Management Studio,可以使用类似下面的查询语句作为起点:

SELECT SUBSTRING(
    (SELECT ', ' + QUOTENAME(COLUMN_NAME)
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'tbl_A'
        ORDER BY ORDINAL_POSITION
        FOR XML path('')),
    3,
    200000);

这个查询语句可以选择到一个变量中,并在动态SQL查询中使用。这样可以解决无法为标识列指定显式值的问题。

在SQL Server中,如果需要为表中的标识列指定显式值,必须使用列列表并将IDENTITY_INSERT设置为ON。如果未按照这种方式操作,则会出现"An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON SQL Server"的问题。通过使用自动生成的列列表查询语句或动态SQL查询,可以解决该问题。

0
0 Comments

问题原因:

在SQL Server中,如果要在自增列(identity column)中插入一个显式值,必须使用列列表(column list)。否则,会出现以下错误提示:“An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON”。

解决方法:

有两种解决方法可以解决这个问题:

解决方法1:

在插入数据时,需要使用列列表(column list),而不是直接插入所有列的值。具体操作如下:

SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table (field1, field2, ...)
  SELECT field1, field2, ...
  FROM source_table;
SET IDENTITY_INSERT archive_table OFF;

其中,`field1, field2, ...` 是表中所有列的名称。如果想自动生成列列表,可以参考链接(Dave's answer或Andomar's answer)中的方法。

解决方法2:

如果表`tbl_A_archive`是一个归档表,并且总是需要指定自增列的显式值,那为什么还需要一个自增列呢?可以将自增列改为普通的非自增列(non-identity column),可以选择以下方法进行操作:

- 如果归档表中还没有数据,可以删除自增列,并添加一个非自增列。

- 使用SQL Server Management Studio将归档表中的自增列的`Identity Specification`/`(Is Identity)`属性设置为`No`。这将在后台创建一个重新创建表并复制现有数据的脚本。为了执行此操作,还需要取消`Tools`/`Options`/`Designers`/`Table and Database Designers`/`Prevent saving changes that require table re-creation`选项的设置。

- 可以使用链接(Remove Identity from a column in a table)中描述的其中一个解决方法。

以上就是解决“An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON SQL Server”问题的原因和解决方法。

0
0 Comments

问题的原因是:在SQL Server中,当使用IDENTITY_INSERT ON时,只有在使用列列表并显式指定身份列的值时,才能为表中的身份列指定显式值。

解决方法是:在INSERT语句中使用列列表,并确保选择的列与目标表匹配。

以下是解决问题的代码示例:

SET IDENTITY_INSERT tableA ON

INSERT Into tableA ([id], [c2], [c3], [c4], [c5] ) 
SELECT [id], [c2], [c3], [c4], [c5] FROM tableB

SET IDENTITY_INSERT tableA OFF

以上代码将允许在tableA表中插入具有指定身份列值的数据。

这个问题的解决方法非常简单明了,只需要在INSERT语句中使用列列表并选择与目标表匹配的列即可。

0