declare     @TemId  varchar(50)
   set @TemId='1,2,3,4,5'
   Select *  From UserInfo Where UserId in (@TemId)给存储过程传入一个数据@TemId  找出 UserInfo 表中 UserId 在 @TemId   的所有数据,会提示错误:
将 varchar 值 '1,2,3,4,5' 转换为数据类型为 int 的列时发生语法错误。如果用 
 Select *  From UserInfo Where UserId in ('1,2,3,4,5')就能查询出来
@TemId   是一个变量,如何传入啊

解决方案 »

  1.   

    如果用 
    Select *  From UserInfo Where UserId in (1,2,3,4,5)就能查询出来 
    @TemId  是一个变量,如何传入啊 
      

  2.   


    CREATE proc proc1
    (
    @TemId
    )
    as
    declare @sql varchar(4000)set @sql='Select *  From UserInfo Where UserId in (replace(@TemId,''',''))   '
    exec @sql
    go
      

  3.   

     declare    @TemId  varchar(50) 
      set @TemId='1,2,3,4,5' declare @sql varchar(100)
    set @sql = 'Select *  From UserInfo Where UserId in (0'if len( @tempid) >0
    begin
    set @sql  = @sql + ','+@temid + ')'end
    else
    begin
    set @sql  = @sql + ')'
    endexec @sql
      

  4.   

      declare    @TemId  varchar(50) 
      set @TemId='1,2,3,4,5' 
      Select *  From UserInfo Where UserId in (@TemId) 这样应该可以的
    不行的话试试  declare    @TemId  varchar(50) 
      set @TemId='1,2,3,4,5' 
      Exec ('Select *  From UserInfo Where UserId in ('+@TemId+')') 
      

  5.   

    CREATE proc proc1
    (
    @TemId varchar(100)
    )
    as
    declare @sql varchar(4000)set @sql='Select *  From UserInfo Where UserId in (@TemId)   '
    exec @sql
    goexec proc1 '1,2,3,4,5'
      

  6.   

    上面两楼正解,SQL语句里不允许出现变量,如果要使用变量,则需要先把完整的SQL语句赋值给一个字符串变量后,用EXEC(字符串变量) 来执行