【问题标题】:Error converting data type varchar to bigint: INSERT INTO SELECT将数据类型 varchar 转换为 bigint 时出错:INSERT INTO SELECT
【发布时间】:2021-09-07 07:55:15
【问题描述】:

我在尝试执行存储过程时不断收到此错误,但不确定原因:

消息 8114:
将数据类型 varchar 转换为 bigint 时出错。

请在下面查看我的 SQL 查询:

INSERT INTO StagingArea.dbo.DimStudentsTEST
       (StudentCode, Module, Year, UniqueStudentID)
    SELECT DISTINCT
        RTRIM(S.STUDENT_Student_ID) + 
            RTRIM(SUBSTRING(AY.ACADEMYR_Academic_Year_Code, 3, 2) +
            SUBSTRING(AY.ACADEMYR_Academic_Year_Code, 8, 2)) AS 'UniqueStudentID',
        ...
    FROM
        ...
    INNER JOIN
        ...

我相信错误正在出现是因为UniqueStudentID 我尝试在 SELECT 行周围使用 CAST & CONVERT 但仍然没有运气。也许我以错误的方式使用。我有一种感觉,这可能是因为我从中提取数据的表的列(“AY.ACADEMYR..”)不是数据类型“bigint”,因此错误消息不断出现。 “UniqueStudentID”列的数据类型是“bigint”数据类型

谁能看到问题出在哪里,或者我是否打算使用 CAST/CONVERT 函数,那么在这种情况下如何最好地使用。

非常感谢,

【问题讨论】:

  • 样本数据和预期结果将帮助我们帮助您。然而,这个错误再清楚不过了。不明白怎么办?
  • SELECT 中的列需要按照INSERT 的正确顺序排列。名称被忽略。现在你正试图将UniqueStudentID 填充到StudentCode 中,这可能是不对的。
  • 您的插入语句首先列出 StudentCode,但您的选择似乎首先返回 UniqueStudentID;只需在您的选择或插入列列表中修复您的列顺序。
  • @JeroenMostert 抱歉,我已确保 INSERT 和 SELECT 的顺序相同……但它与插入 (DimStudentsTEST) 的实际表的顺序不同。区别?
  • @Stu 抱歉,我已确保 INSERT 和 SELECT 的顺序相同......但它与插入 (DimStudentsTEST) 的实际表的顺序不同......有区别吗?应该在上面的查询中明确说明

标签: sql sql-server


【解决方案1】:

假设在INSERT 期间列的顺序正确。

我怀疑你在底层组件中可能有一些意想不到的数据/字符串。

要识别虚假记录,请使用try_convert() 尝试以下操作。如您所知,如果转换失败,try_convert() 将返回 NULL。

示例

Select *
 From  ...
 Where try_convert(bigint,RTRIM(S.STUDENT_Student_ID)+RTRIM(SUBSTRING(AY.ACADEMYR_Academic_Year_Code,3,2)+SUBSTRING(AY.ACADEMYR_Academic_Year_Code,8,2))) is null

【讨论】:

  • 嗨,你完全正确!列中引用的字符将其强制转换为数据类型 varchar。对我昨天很晚才尝试的延迟响应表示歉意。再次感谢您
  • @Daisy 总是乐于提供帮助。很高兴您发现了问题
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多