SQL: копирование целых таблиц без идентификационного столбца? - PullRequest
0 голосов
/ 08 апреля 2019

По сути, мой вопрос заключается в том, как бы скопировать определенную таблицу без (как и во всем ее содержимом) столбца идентификаторов?

Для уточнения, скажем, у меня есть схема с именем 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 для хранения данных.

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

1 Ответ

2 голосов
/ 08 апреля 2019

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

SET IDENTITY_INSERT completed_tasks_archive ON;   

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

SET IDENTITY_INSERT completed_tasks_archive OFF;

ВыТакже необходимо указать имена столбцов.«*» Недостаточно.

Посмотрите на IDENTITY INSERT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...