您好我正在尝试以下查询。 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)
任何人都可以帮助我失去转换的地方......
答案 0 :(得分:1)
试试这个:
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)
答案 1 :(得分:0)
使用Table-Valued User-Defined Functio n将逗号分隔的字符串@ProjectID
转换为表格中的记录。然后在Where子句
WHERE [CNSDR_PROJ_ID] in (SELECT projID from @ResultTable)
表变量@ResultTable
包含int类型的projID
列中的项目ID,它使用链接中给出的userdefined函数填充。