-1

我在查询中遇到以下问题

将 nvarchar 值“190,191,192”转换为数据类型 int 时转换失败。

询问

SELECT * 
FROM SGI_User
JOIN SGI_Agency_User
ON SGI_User.User_Id = SGI_Agency_User.User_Id
WHERE SGI_Agency_User.Agency_Id IN
(select STUFF(
                (select CAST(',' as varchar(max)), cast(agency_id as int)
                from sgi_agency
                where filial_de_int_matriz = 192 or 
                (Agency_Id = 192 and Filial_De_int_matriz = 0)
                for xml path('')), 1, 1, ''))
and SGI_User.Deleted = 0

这 3 个值190,191,192来自此查询

select STUFF(
        (select CAST(',' as varchar(max)), cast(agency_id as int)
        from sgi_agency
        where filial_de_int_matriz = 192 or 
        (Agency_Id = 192 and Filial_De_int_matriz = 0)
        for xml path('')), 1, 1, '')

返回 avarchar但我的SGI_Agency_User.Agency_Id领域是INT我尝试了一些CAST但没有成功。我该怎么做这个查询?

4

1 回答 1

3

我不明白为什么您认为首先需要将这些INT值转换为字符串...

你不能简单地使用:

WHERE SGI_Agency_User.Agency_Id IN
                (SELECT agency_id
                 FROM sgi_agency
                 WHERE filial_de_int_matriz = 192 
                    OR (Agency_Id = 192 AND Filial_De_int_matriz = 0)
                )

并完全跳过所有来回转换?这个子查询将返回一个整数值列表,操作可以使用它IN- 没问题,不需要任何转换......

于 2013-07-29T15:11:41.653 回答