CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
(
@ListItemValue varchar(8000),
@ListDisplayName  varchar(8000) output
)
ASbegin
declare @str varchar(8000)  set @str =''
 select @str = @str +',' + ListDisplayName  from ProductAttributeLookupListItems where ListItemValue in(@ListItemValue)  set  @ListDisplayName=stuff(@str,1,1,'')
print @ListDisplayName
end
GO@ListItemValue 传递14,18,22这样的子符串
错误:
System.Data.SqlClient.SqlException: 将 varchar 值 '14,18,22' 转换为数据类型为 int 的列时发生语法错误。请高手指教!感激涕零~

解决方案 »

  1.   

    ListItemValue 在数据库中是什么型?
      

  2.   

    ListItemValue整型, @ListItemValue是varchar(8000)传递多个值过来,好像是自动会在in里面变成('14,18,22' ),这样就不合法了,应该是in(14,18,22)
    如何能将那个自动的两个''号去掉,我试过用replace也不行,有什么好方法,谢谢指教
      

  3.   

    CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
    (
    @ListItemValue varchar(8000),
    @ListDisplayName  varchar(8000) output
    )
    ASbegin
    declare @str varchar(8000) 
    declare @tb table(a int)
    while  charindex(',',@s)>0
    begin
     insert  @tb values(cast(left(@s,charindex(',',@ListItemValue )-1) as int))
     set @s = stuff(@ListItemValue ,1,charindex(',',@ListItemValue ),'')
    end 
    insert  @tb values(@ListItemValue) set @str =''
     select @str = @str +',' + ListDisplayName  from ProductAttributeLookupListItems where ListItemValue in(select a from @tb)  set  @ListDisplayName=stuff(@str,1,1,'')
    print @ListDisplayName
    end
    GO
      

  4.   


    用下面这个:
    CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
    (
    @ListItemValue varchar(8000),
    @ListDisplayName  varchar(8000) output
    )
    ASbegin
    declare @str varchar(8000) 
    declare @tb table(a int)
    while  charindex(',',@ListItemValue )>0
    begin
     insert  @tb values(cast(left(@s,charindex(',',@ListItemValue )-1) as int))
     set @s = stuff(@ListItemValue ,1,charindex(',',@ListItemValue ),'')
    end 
    insert  @tb values(@ListItemValue) set @str =''
     select @str = @str +',' + ListDisplayName  from ProductAttributeLookupListItems where ListItemValue in(select a from @tb)  set  @ListDisplayName=stuff(@str,1,1,'')
    print @ListDisplayName
    end
    GO
      

  5.   

    谢谢,
    其中set @s未定义
    是不是@str?
      

  6.   

    CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
    (
    @ListItemValue varchar(8000),
    @ListDisplayName  varchar(8000) output
    )
    ASbegin
    declare @str varchar(8000) 
    declare @tb table(a int)
    while  charindex(',',@ListItemValue )>0
    begin
     insert  @tb values(cast(left(@ListItemValue,charindex(',',@ListItemValue )-1) as int))
     set @s = stuff(@ListItemValue ,1,charindex(',',@ListItemValue ),'')
    end 
    insert  @tb values(@ListItemValue) set @str =''
     select @str = @str +',' + ListDisplayName  from ProductAttributeLookupListItems where ListItemValue in(select a from @tb)  set  @ListDisplayName=stuff(@str,1,1,'')
    print @ListDisplayName
    end
    GO
      

  7.   

    应该这样是对的了
    CREATE PROCEDURE  GetDisplayNameByBatchAttibuteValues
    (
    @ListItemValue varchar(8000),
    @ListDisplayName  varchar(8000) output
    )
    ASbegin
    declare @str varchar(8000) 
    declare @tb table(a int)
    while  charindex(',',@ListItemValue )>0
    begin
     insert  @tb values(cast(left(@ListItemValue,charindex(',',@ListItemValue )-1) as int))
     set @ListItemValue = stuff(@ListItemValue ,1,charindex(',',@ListItemValue ),'')
    end 
    insert  @tb values(@ListItemValue) set @str =''
     select @str = @str +',' + ListDisplayName  from ProductAttributeLookupListItems where ListItemValue in(select a from @tb)  set  @ListDisplayName=stuff(@str,1,1,'')end
    GO但是没有返回结果,很奇怪
      

  8.   

    感谢haonanernet(与时俱进) ,问题解决,给分