我在查询中遇到以下问题
将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, '')
返回varchar
但我的SGI_Agency_User.Agency_Id
字段为INT
我尝试了一些CAST
,但没有成功。我该怎么做这个查询?
答案 0 :(得分: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
操作使用 - 没问题,不需要任何转换......