SQL — ошибка при копировании всей таблицы в другую

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я пытаюсь создать дубликат таблицы, то есть скопировать схему, а также данные в новую таблицу, но я столкнулся с некоторыми проблемами, из-за которых я не могу понять сообщение об ошибке.

Моя исходная схема таблицы выглядит следующим образом. Имеется 54 поля. Из-за проблемы с защитой данных я должен заблокировать все имена полей.

введите описание изображения здесь

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

введите описание изображения здесь

Затем я выполнил следующую команду для копирования данных из table1 в table2:

 insert into HDM_XXX.XXX.XXX_Table_2
select * from HDM_XXX.XXX.XXX_Table_1
 

Но была сгенерирована следующая ошибка:

 Msg 8152, Level 16, State 2, Line 1
String or binary data would be truncated.
The statement has been terminated.

Completion time: 2020-11-29T21:42:13.6804543 00:00 
 

Я был бы очень признателен за любые советы!

Комментарии:

1. это не «точно так же, за исключением одного», типы столбцов начинают отличаться примерно с 15-го, а некоторые переменные, похоже, стали уже.

2. Рекомендуется всегда явно указывать столбцы для вставки и выбора.

Ответ №1:

Перечислите все общие столбцы!

 insert into HDM_XXX.XXX.XXX_Table_2 ( col1, col2, . . . )
    select col1, col2, . . .
    from HDM_XXX.XXX.XXX_Table_1
 

Ответ №2:

Альтернативным решением является одновременное создание таблицы и вставка данных:

 SELECT  IDENTITY(1,1) AS Compliance_Id
,       *
INTO    your_table_copy
FROM    your_table