2014-08-06 3 views
0

У меня есть большая хранимая процедура, и внутри нее есть подзапрос, который выглядит следующим образом.SQL Sub Query с префиксом столбца

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) так что не уверен, что это значит?

+0

это лечение это как символ плюс целое: «расширение прав и возможностей _» + А. [submissionID] Я предполагаю, что submissionID является целым числом, и empowerment_ + любое целое число будет ошибкой, поскольку он пытается конвертировать 'расширение полномочий' в целое число. конвертируйте представлениеID в varchar, затем добавьте их – Twelfth

ответ

0

Просто сделайте явный cast():

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

Проблема заключается в том, что + может означать как добавление или объединение строк. Поскольку второй аргумент является целым числом, он предполагает, что + является добавлением, а 'empowerment_' не может быть преобразован в целое число. Следовательно, ошибка.

0

SubmissionID, вероятно, относится к типу данных. Попробуй это.

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

Проблема заключается в том, что SQL Server интерпретирует знак плюса как оператор сложения, а не оператор конкатенации. Попробуйте это:

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