基本上我的问题是,我如何复制某个表而没有(如其全部内容一样)identity列?
详细地说,假设我有一个名为completed_tasks
的架构,我想将其所有内容插入completed_tasks_archive
:
$stmt = $GLOBALS['conn']->prepare("INSERT INTO completed_tasks_archive SELECT * FROM completed_tasks; ");
$stmt->execute();
该代码应该可以正常工作,但是由于Identity列(我将其称为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。
很抱歉,我的问题有些复杂,但我仍在学习如何使用所有这些内容,更重要的是,学习了如何优雅地使用它。
答案 0 :(得分:2)
由于您正在使用具有自动增量标识的列,因此必须启用该列的插入。
SET IDENTITY_INSERT completed_tasks_archive ON;
执行插入操作后,应将其停用。
SET IDENTITY_INSERT completed_tasks_archive OFF;
您还必须提供列名。 “ *”是不够的。