放入VARCHAR数据并搜索INT值时出错

时间:2017-09-26 07:18:13

标签: sql-server sql-server-2008

以下是我的查询和错误。当我输入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时,转换失败。

2 个答案:

答案 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)