1

嗨,我正在尝试以下查询。其中 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)

任何人都可以在我缺少转换的地方帮忙...

4

2 回答 2

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)
于 2013-12-24T06:08:29.223 回答
0

使用表值用户定义函数将逗号分隔的字符串转换@ProjectID为表中的记录。然后在 Where 子句中使用此表

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

表变量在 int 类型@ResultTable的列中包含项目 ID,该列projID 使用链接中给出的用户定义函数填充。

于 2013-12-24T06:14:28.263 回答