Я получаю следующую ошибку для простого оператора INSERT INTO
The conversion of the nvarchar value '5551662080' overflowed an int column.
Я понимаю, что значение превышает границы INT, но я нигде не преобразую в INT. Поле в исходной таблице - это NVARCHAR (MAX) в месте назначения, которое я пробовал. FLOAT и BIGINT не работают с одной и той же ошибкой.
Справочная информация - исходная таблица, которую я не могу контролировать - все поля NVARCHAR (MAX) и таблица содержат данные о более чем 6 миллионах файлов, созданных в результате выполнения сценариев powershell. Я перемещаю их в таблицу с более подходящими типами данных.
Вот SQL:
INSERT INTO dbo.File01 (
[Name]
,[Length]
,[Directory]
,[Extension]
,[CreationTime]
,[LastWriteTime]
,[IsFile]
)
SELECT
[Name]
,cast([Length] as Bigint)
,[Directory]
,[Extension]
,convert(datetime2,[CreationTime], 103)
,convert(datetime2,[LastWriteTime], 103)
,iif(isnull([Length],1)=1, 0, 1)
FROM dbo.FileData
Проблема в столбце длины файла - в противном случае все работает нормально. Он работает с первыми 91k строками, просто терпит неудачу, когда достигает этого большого числа.
Все ссылки, которые я могу найти, указывают на триггеры или хранимые процедуры, где где-то скрыто преобразование INT, но здесь это не так - это совершенно новая БД, которая существует только для этой работы
* ПРАВКА Структура таблицы для целевой таблицы
Column Name Data type Max Length precision scale is_nullable
Name nvarchar -1 0 0 0 0
Length bigint 8 19 0 1 0
Directory nvarchar -1 0 0 1 0
Extension nvarchar -1 0 0 1 0
CreationTime datetime2 8 27 7 1 0
LastWriteTime datetime2 8 27 7 1 0
IsFile bit 1 1 0 1 0