小编典典

使用临时表删除硬编码值时出现问题

sql

我在编写查询时遇到问题。执行查询时出现错误。

询问:

select case

when S.R1 = '6' then 5

when S.R1 =  '7' then 6

when S.R1 = '8' then 7

when S.R1 = '9' then 8

when S.R1 ='10' then 9

else S.R1 end as Q

FROM [HelpService].[dbo].[help] s
-----------------------------------------------

SELECT [Source], [Score]

INTO #Temp_Q

FROM [HelpDesk].[dbo].[Survey]

WHERE [data_Source Name] = 'Text Data'

-----------------------------------------------

select CONVERT(REAL, a.[Dell Score]) as Q

FROM [HelpService].[dbo].[help] s

LEFT OUTER JOIN #CE_Temp_Q a on

s.[R1] = a.[Source]

错误

消息8114,第16级,状态5,第1行

将数据类型varchar转换为实数时出错。

我需要做的是,我需要删除硬编码值,并需要使用临时表编写查询。

在此先感谢,Shashra


阅读 154

收藏
2021-05-16

共1个答案

小编典典

将数据类型varchar转换为实数时出错

这意味着您的值之一包含不是数字的内容。

例如以下工作正常

SELECT convert(Real, '1')
UNION SELECT convert(Real, ' ')
UNION SELECT convert(Real, NULL)
UNION SELECT convert(Real, '123.123')
UNION SELECT convert(Real, '   456  ')

―但是以下任何一种都会产生与您得到的相同的错误

SELECT convert(Real, '   456  ')


SELECT CONVERT(Real, '1 2')

更新

有时候,问题的价值并不那么明显

尝试以下找到它

SELECT DISTINCT 
        a.[Dell Score]
FROM 
      [HelpService].[dbo].[help] s
      LEFT OUTER JOIN #CE_Temp_Q a on
      s.[R1] = a.[Source]

或者

  SELECT DISTINCT 
        a.[Dell Score],
        DATALENGTH (a.[Dell Score])
  FROM 
      [HelpService].[dbo].[help] s
      LEFT OUTER JOIN #CE_Temp_Q a on
      s.[R1] = a.[Source]
2021-05-16