Запрос выбора SQL — ошибка преобразования

Привет, я пытаюсь выполнить запрос ниже. Где выход ProjectID равен 1,2,3. Я пытаюсь получить данные, используя ProjectID из другой таблицы.

  DECLARE @ProjectID varchar(100)
 DECLARE @ImpactIntakeID varchar(100)

set @ProjectID =
(SELECT STUFF ((SELECT ',' + CAST(Proj_ID AS VARCHAR) FROM PROJECT
 WHERE YEAR(Enter_Dt) < (YEAR(GETDATE-()-7)) FOR XML PATH('')), 1, 1, '') 
AS Enter_Date)

print @ProjectID

set @ImpactIntakeID = 
(SELECT STUFF ((SELECT ',' + CAST([IMPCT_INTAKE_ID] AS VARCHAR) FROM [IMPCT_INTAKE_REQ]
 WHERE [CNSDR_PROJ_ID] in (@ProjectID) FOR XML PATH('')), 1, 1, '') 
 AS ImpactIntakeID)

print @ImpactIntakeID

Я получаю ошибку преобразования. Ошибка преобразования при преобразовании значения varchar '1,2,3' в тип данных int. Я не уверен, где мне не хватает преобразования. Я также пробовал ниже ..

 set @ImpactIntakeID = 
(SELECT STUFF ((SELECT ',' + CAST([IMPCT_INTAKE_ID] AS VARCHAR) FROM [IMPCT_INTAKE_REQ]
WHERE [CNSDR_PROJ_ID] in (''+@ProjectID+'') FOR XML PATH('')), 1, 1, '') 
AS ImpactIntakeID)

а также

  set @ImpactIntakeID = 
 (SELECT STUFF ((SELECT ',' + CAST([IMPCT_INTAKE_ID] AS VARCHAR) FROM [IMPCT_INTAKE_REQ]
 WHERE CAST([CNSDR_PROJ_ID] AS VARCHAR) in (@ProjectID) FOR XML PATH('')), 1, 1, '') 
 AS ImpactIntakeID)

Может ли кто-нибудь помочь, где я пропускаю преобразование...


person sk7730    schedule 24.12.2013    source источник


Ответы (2)


Попробуй это:

SET @ImpactIntakeID = 
(SELECT STUFF ((SELECT ',' + CAST([IMPCT_INTAKE_ID] AS VARCHAR) FROM [IMPCT_INTAKE_REQ]
 WHERE [CNSDR_PROJ_ID] IN (SELECT Proj_ID FROM PROJECT WHERE YEAR(Enter_Dt) < (YEAR(GETDATE()-7))) FOR XML PATH('')), 1, 1, '') 
 AS ImpactIntakeID)

ИЛИ

SET @ImpactIntakeID = 
(SELECT STUFF ((SELECT ',' + CAST([IMPCT_INTAKE_ID] AS VARCHAR) FROM [IMPCT_INTAKE_REQ]
WHERE ',' + @ProjectID + ',' LIKE '%,' + CONVERT(VARCHAR(20), [CNSDR_PROJ_ID]) + ',%' FOR XML PATH('')), 1, 1, '') 
AS ImpactIntakeID)
person Saharsh Shah    schedule 24.12.2013
comment
@saravanakumarr Проверьте мой обновленный ответ. Я удалил - из GETDATE-() и заменил его на GETDATE(). Это будет работать - person Saharsh Shah; 24.12.2013
comment
Спасибо, Джи ... Это работает ... Но я не знаю, почему мой подход вызывает проблему преобразования, хотя я присваиваю результаты переменной и использую ее в условии where in... - person sk7730; 24.12.2013
comment
@saravanakumarr Добро пожаловать. В предложении IN вы должны передать все значения с одним и тем же типом данных. Но здесь вы передаете строковые данные и сравниваете их с целочисленными данными. - person Saharsh Shah; 24.12.2013

Используйте Пользовательская функция с табличным значениемn для преобразования строки @ProjectID, разделенной запятыми, в записи в таблице . Затем используйте эту таблицу в предложении Where.

WHERE [CNSDR_PROJ_ID] in (SELECT projID from @ResultTable)

Табличная переменная @ResultTable содержит идентификаторы проектов в столбце projID типа int, который заполняется с помощью пользовательской функции, указанной в ссылке.

person Mudassir Hasan    schedule 24.12.2013