#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