转换varchar值'|'时转换失败数据类型为int

时间:2020-03-17 02:45:28

标签: sql sql-server tsql

输入是具有7列信息的单行或多行表 我想将这7列变成一个多行表,其中第一列重复,另外两列重复,第二列具有componentID,第三列是componentLength。

这是下面的原始问题。

  SELECT
        (CASE 
            WHEN SpecificationID = '889' AND RTTopEntryLength > '0' AND RTSideEntryLength > '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id + '|' + infill_id))
            WHEN SpecificationID = '889' AND RTTopEntryLength = '0' AND RTSideEntryLength > '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id))
            WHEN SpecificationID = '889' AND RTTopEntryLength > '0' AND RTSideEntryLength = '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id))
            ELSE CONVERT(varchar, infill_id) 
         END) AS 'InfillIDList'
    FROM 
        INFILLTABLE
    WHERE 
        SpecificationID = '889'

我收到此错误:

Msg 245, Level 16, State 1, Line 1  
Conversion failed when converting the varchar value '|' to data type int.

我在这里想念什么?我正在将整个字符串转换为Varchar,为什么在尝试再次转换为整数时出现错误?

1 个答案:

答案 0 :(得分:2)

它正在尝试处理以下内容:(infill_id +'|'+ infill_id),并出现错误。 您可以通过以下方式实现相同的结果:select 3+'jj'+2,您将看到以下消息:将varchar值'jj'转换为数据类型int时转换失败。

(infill_id+'|'+infill_id)更改为concat(infill_id,'|',infill_id)

(并且它尝试将int评估为 ,然后将结果转换为varchar)

如果您真的很感兴趣,为什么可以在这里阅读:https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-ver15