SQL:复制没有识别列的整个表吗?

时间:2019-04-08 07:01:07

标签: sql sql-server

基本上我的问题是,我如何复制某个表而没有(如其全部内容一样)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。

很抱歉,我的问题有些复杂,但我仍在学习如何使用所有这些内容,更重要的是,学习了如何优雅地使用它。

1 个答案:

答案 0 :(得分:2)

由于您正在使用具有自动增量标识的列,因此必须启用该列的插入。

SET IDENTITY_INSERT completed_tasks_archive ON;   

执行插入操作后,应将其停用。

SET IDENTITY_INSERT completed_tasks_archive OFF;

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

看看IDENTITY INSERT