sql - 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。
如果我的问题有点令人费解,我深表歉意,但我仍在学习如何使用所有这些,更重要的是,学习如何优雅地使用它。
解决方案
因为您使用的是具有自动增量标识的列,所以您必须为此列启用插入。
SET IDENTITY_INSERT completed_tasks_archive ON;
执行插入后,您应该将其停用。
SET IDENTITY_INSERT completed_tasks_archive OFF;
您还必须提供列名。“*”是不够的。
推荐阅读
- c# - SQLDependancy 后应用程序崩溃
- android - 需要帮助学习为此 Android 应用程序(Kotlin、MVVM、Room、Dagger2)编写测试
- python - 我们能否避免对只有 2 个唯一值的分类数据使用一种热编码?
- php - PHP中的页面分页
- c# - 在 DynamicExpreso 中解析具有未知数量参数的表达式
- javascript - JQuery Select2无法选择选项
- windows - 在 ffmpeg 中使用 WxH 时出现无效帧大小错误
- git - 如何通过 shell 命令行授予组对 Bitbucket 存储库的写入权限
- graphql - 错误:BabelPluginRemoveGraphQL:字符串插值
- arrays - 从范围数组获取索引时出现 VBA 错误