SQL Select Query - Ошибка преобразования
Привет я пытаюсь ниже запрос. Где вывод 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)
Может кто-нибудь, пожалуйста, помогите, где мне не хватает преобразования...
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)
Используйте пользовательскую функцию с табличным значением для преобразования строки, разделенной запятыми @ProjectID
к записям в таблице. Затем используйте эту таблицу в предложении Where
WHERE [CNSDR_PROJ_ID] in (SELECT projID from @ResultTable)
Переменная таблицы @ResultTable
содержит идентификаторы проекта в столбце projID
типа int, который заполняется с помощью пользовательской функции, указанной в ссылке.