Sql 带STUFF函数的WHERE子句

Sql 带STUFF函数的WHERE子句,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想做一个查询,得到一个单独的ID,然后用逗号,把它放在我的where子句中 但是发生以下错误 Msg 245,16级,状态1,第10行 转换nvarchar值“299829999300030013000330043005300630730083009301030113013023013348223488334843485348634873488348934903491349234943495,…”时转换失败 我试过一些石膏,但不起作用 示例查询: SELECT A.ID, A.ID_PERIO

我想做一个查询,得到一个单独的ID,然后用逗号,把它放在我的
where
子句中

但是发生以下错误

Msg 245,16级,状态1,第10行
转换nvarchar值“299829999300030013000330043005300630730083009301030113013023013348223488334843485348634873488348934903491349234943495,…”时转换失败

我试过一些石膏,但不起作用

示例查询:

SELECT A.ID, A.ID_PERIODO_GESTAO, A.ID_FILIAL, A.ID_RESPONSAVEL_AREA, A.ID_PARENT, A.ID_SOURCE, A.COD_AREA, A.DESC_AREA, A.ATIVO, A.USER_LOGIN_RESP, A.NOME_RESP, A.DESC_FILIAL, A.COD_AREA_SUP, A.FOTO_PATH, 
A.COLABORADOR_ID,
CASE WHEN (SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) IS NULL THEN 0 ELSE 
(SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) END AS QTD_COLABORADORES,
A.LEVEL_TREE,LEN(A.LEVEL_TREE),

STUFF(
           (SELECT ',' + CAST(VW.ID AS VARCHAR(10))
            FROM VW_AREA VW
            WHERE LEN(VW.LEVEL_TREE) > LEN(A.LEVEL_TREE) 
            AND VW.ID_PERIODO_GESTAO = 2                 
            FOR XML PATH('')), 1, 1, '')

FROM VW_AREA A
LEFT JOIN dbo.COLABORADOR_AREA ON dbo.COLABORADOR_AREA.ID_COLABORADOR = A.COLABORADOR_ID        
WHERE A.ID_FILIAL IN (9) AND A.ID_PERIODO_GESTAO = 2

UNION

SELECT A.ID, A.ID_PERIODO_GESTAO, A.ID_FILIAL, A.ID_RESPONSAVEL_AREA, A.ID_PARENT, A.ID_SOURCE, A.COD_AREA, A.DESC_AREA, A.ATIVO, A.USER_LOGIN_RESP, A.NOME_RESP, A.DESC_FILIAL, A.COD_AREA_SUP, A.FOTO_PATH, 
A.COLABORADOR_ID,
CASE WHEN (SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) IS NULL THEN 0 ELSE 
(SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) END AS QTD_COLABORADORES,
A.LEVEL_TREE, LEN(A.LEVEL_TREE),

    STUFF(
            (SELECT ',' + CAST(VW.ID AS VARCHAR(10))
             FROM VW_AREA VW 
             WHERE LEN(VW.LEVEL_TREE) > LEN(A.LEVEL_TREE) 
             AND VW.ID_PERIODO_GESTAO = 2           
             FOR XML PATH('')), 1, 1, '') AS 

FROM VW_AREA A
LEFT JOIN dbo.COLABORADOR_AREA ON dbo.COLABORADOR_AREA.ID_COLABORADOR = A.COLABORADOR_ID
JOIN CTE4 ON A.ID = CTE4.ID_PARENT
WHERE A.ID_PERIODO_GESTAO = 2 
AND (A.ID IN (CTE4.ID_PARENT))
结果

QTD_COLABORATOR    LEVEL_TREE     QTD_CARACTER_IN_LEVEL_TREE
1                  002            3
最后一列带有STUFF函数,将包含这样的数据

299729982993000300130003300430053006307300830093010301113012301330133014301530163017


这是所有在LEVEL_TREE中包含超过3个字符的ID,它们永远不会起作用。您正试图对字符串使用in比较器。因此出现了语法错误。你为什么不能这么做

SELECT SUM(A.ID) 
 FROM COLABORATOR A 
 WHERE A.ID IN (SELECT VW.ID FROM VW_AREA VW)

Hi STUFF将使您的值以逗号分隔,IN子句将期望结果集为int,因此它会崩溃, 您可以通过如下方式执行动态字符串:

SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
EXEC (@sqlCommand)

您能为我们提供一些存储在VW_区域视图中的ID的示例值吗?您没有最后一列的别名。我更新了我的查询,现在我可以告诉您这不是那么简单。不幸的是,与最初的问题相比,更新后的SQL没有多大意义。它有一些明显的无关语法错误,并且没有显示您最初描述的问题。你能再检查一下吗?