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 для хранения данных.

And I kind of begin to hate MS SQLSRV after working with MySQLi for a couple of weeks.

Я извиняюсь, если мой вопрос немного запутан, но я все еще учусь, как использовать все это и, что более важно, учусь, как использовать это элегантно.

Целевая таблица также имеет идентификатор. Если вы делаете это по историческим причинам, то нет смысла иметь это свойство удостоверения. Вы можете просто изменить этот столбец (в SSMS это нормально), чтобы удалить свойство идентификации из целевой таблицы.

Zorkolot 08.04.2019 15:39
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы используете столбец с автоинкрементным идентификатором, вам необходимо разрешить вставку для этого столбца.

SET IDENTITY_INSERT completed_tasks_archive ON;   

После выполнения вставки вы должны деактивировать ее.

SET IDENTITY_INSERT completed_tasks_archive OFF;

Вы также должны указать имена столбцов. Знака "*" недостаточно.

Взгляните на ИДЕНТИФИКАЦИОННАЯ ВСТАВКА

Другие вопросы по теме