【发布时间】:2020-04-30 20:03:07
【问题描述】:
我在一个简单的 INSERT INTO 语句中收到以下错误
The conversion of the nvarchar value '5551662080' overflowed an int column.
我了解,该值超出了 INT 的范围,但我不会在任何地方转换为 INT。 源表中的字段是目标中的 NVARCHAR(MAX) 我尝试过 FLOAT 和 BIGINT 都失败并出现同样的错误。
背景是我无法控制的源表 - 所有字段都是 NVARCHAR(MAX) 并且该表包含超过 600 万个文件的数据,这些文件起源于 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
【问题讨论】:
-
嗨@SurajKumar 恐怕列类型已经是Bigint。任何地方都看不到 Int 类型
-
能否显示表结构。
-
表结构添加@YogeshSharma
标签: sql sql-server casting