首页 > 解决方案 > SQL:复制没有标识列的整个表?

问题描述

基本上我的问题是如何在没有身份列的情况下复制某个表(如其全部内容)?

详细地说,假设我有一个名为的模式completed_tasks,我想将其所有内容插入completed_tasks_archive

$stmt = $GLOBALS['conn']->prepare("INSERT INTO completed_tasks_archive SELECT * FROM completed_tasks; ");
$stmt->execute();

代码应该可以正常工作,但由于身份列,我将其称为ID我无法执行此操作。

我收到这样的错误:

PHP Fatal error:  Uncaught PDOException: SQLSTATE[23000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]An explicit value for the identity column in table 'completed_tasks_archive' can only be specified when a column list is used and IDENTITY_INSERT is ON.

基本上,我想知道是否有一种更快的方法来进行这种数据事务,而无需在查询中指定所有细节。

我正在使用 MS SQLSRV 来存储数据。

在使用 MySQLi 几周后,我开始讨厌 MS SQLSRV。

如果我的问题有点令人费解,我深表歉意,但我仍在学习如何使用所有这些,更重要的是,学习如何优雅地使用它。

标签: sqlsql-server

解决方案


因为您使用的是具有自动增量标识的列,所以您必须为此列启用插入。

SET IDENTITY_INSERT completed_tasks_archive ON;   

执行插入后,您应该将其停用。

SET IDENTITY_INSERT completed_tasks_archive OFF;

您还必须提供列名。“*”是不够的。

看看IDENTITY INSERT


推荐阅读