输入是具有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,为什么在尝试再次转换为整数时出现错误?
答案 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