以下是我的查询和错误。当我输入VARCHAR变量并传入INT值时,我收到错误。
查询:
declare @vid VARCHAR(MAX)
set @vid= ('3,5,7')
Select (Stuff((Select ', ' + VehicleClassName
From VehicleClass_Master
where VehicleClassId in (@VID) FOR XML PATH('')),1,2,''))
错误:
Msg 245,Level 16,State 1,Line 3 将varchar值“3,5,7”转换为数据类型int时,转换失败。
答案 0 :(得分:1)
您的变量@vid是包含非数字字符(,)的varchar;它也不是一个“列表”,它只是一个包含单个值的字符串,恰好有数字和逗号。
要获得所需内容,请将@vid创建为具有单个INT列的表变量,然后将每个值作为单独的行插入 - INSERT @vid_table(vid) VALUES (3),(5),(7);
最后将您的IN (@VID)
更改为IN (SELECT VID FROM @vid_table)
答案 1 :(得分:0)
declare @vid VARCHAR(MAX),@query varchar(max)
set @vid= ('3,5,7')
SET @query = 'Select (Stuff((Select '', '' + VehicleClassName From VehicleClass_Master where VehicleClassId in (' + @vid + ') FOR XML PATH('''')),1,2,''''))'
EXEC (@query)