首页 > 解决方案 > 在 T-SQL 中使用它在 UNION 中转换时 CAST 失败

问题描述

我正在尝试使用CAST以连接唯一标识符 int 数据类型。

当我在单个 select 语句中运行脚本时,它可以工作,但是当我使用 union 与另一个查询一起运行它时,我收到错误消息:

消息 245,级别 16,状态 1,第 31
行将 varchar 值“211870 1:2”转换为数据类型 int 时转换失败。

请参阅以下查询:

SELECT DISTINCT
    CASE  
       WHEN SHIFT_CODE = '1:2 Support' 
          THEN '3'
          ELSE '' 
    END [Datatype Id],
    CAST(SS.Schedule_Subshift_ID AS VARCHAR(20)) + ' 1:2' [Unique Visit ID]
 '' [Date],
 '' [Start Time],
 ''+ ',' [End Time],
 ''+ ',,,' [Unique Client ID],
 '' [Client Forename]
FROM 
    Subshift
UNION

  SELECT DISTINCT
    CASE 
       WHEN CAST(CAST(EE.Start_Date_SK AS VARCHAR(255)) AS DATE) >= (GETDATE() - 41) 
          THEN ' 11 '
          ELSE ''
    END [DataTypeID],
    '' [Unique Visit ID],
    '' [Date],
    '' [Start Time],
    ''+ ',' [End Time],
    ''+ ',,,' [Unique Client ID],
    '' [Client Forename]
  FROM 
     Subshift

我在不使用 Union 的情况下运行它时得到的结果

DataTypeID  Unique Visit ID     Date        Start Time  End Time
    3         272574 1:2       20/01/2020   19:00       22:00,
    3         272575 1:2       23/01/2020   19:00       22:00,
    3         272575 1:2       23/01/2020   19:00       22:00,`

使用 Union 时得到的结果:

消息 245,级别 16,状态 1,第 31
行将 varchar 值“211870 1:2”转换为数据类型 int 时转换失败。

您能否提供一个 T-SQL 查询建议,该查询最适合用于CAST和在其中CONVERT发挥作用UNION

联盟的后半部分如下:

标签: sql-server

解决方案


很可能您正在尝试将数据插入到结构不正确的表中(第二列的类型为 int)。

您还可以尝试再次转换该值:

CAST(CAST(SS.Schedule_Subshift_ID AS VARCHAR(20)) + ' 1:2' AS VARCHAR(24)) [Unique Visit ID]

推荐阅读