【问题标题】:SQL Sub Query with column prefix带有列前缀的 SQL 子查询
【发布时间】:2014-08-06 18:06:25
【问题描述】:

我有一个大型存储过程,其中有一个子查询,如下所示。

SELECT COUNT(userID) AS totalLikes FROM apsLikes WHERE likeID = 'empowerment_'+A.[submissionID]
FOR    XML PATH ('likes'), TYPE, ELEMENTS

likeID 列中,我的值带有prefix_id

当我尝试运行查询时,我收到此错误:

Conversion failed when converting the varchar value 'empowerment_' to data type int.

likeID的数据类型是varchar(60)所以不知道是什么意思?

【问题讨论】:

  • 它把它当作一个字符加上一个整数:'empowerment_'+A.[submissionID] 我假设 submitID 是一个整数,并且 powerment_ + 任何整数都会是一个错误,因为它试图转换'empowerment' 为整数。将 submitID 转换为 varchar,然后添加它们

标签: sql tsql stored-procedures sql-server-2012


【解决方案1】:

只要做一个明确的cast():

SELECT COUNT(userID) AS totalLikes
FROM apsLikes
WHERE likeID = 'empowerment_' + cast(A.[submissionID] as varchar(255))
FOR    XML PATH ('likes'), TYPE, ELEMENTS;

问题是+ 可以表示加法或字符串连接。因为第二个参数是整数,所以它假定+ 是加法,而'empowerment_' 不能转换为整数。因此,错误。

【讨论】:

    【解决方案2】:

    SubmissionID 可能是数据类型int。试试这个。

    SELECT COUNT(userID) AS totalLikes 
    FROM apsLikes WHERE likeID = 'empowerment_'+ CAST(A.[submissionID] AS NVARCHAR(255))
    FOR    XML PATH ('likes'), TYPE, ELEMENTS
    

    【讨论】:

      【解决方案3】:

      问题在于 SQL Server 将加号解释为加法运算符而不是串联运算符。试试这个:

      SELECT COUNT(userID) AS totalLikes 
      FROM apsLikes WHERE likeID = 'empowerment_'+ CAST(A.[submissionID] AS VARCHAR(50))
      FOR XML PATH ('likes'), TYPE, ELEMENTS
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多