SELECT * FROM tablename in (@a)这里的@a变量  是个什么类型
我能否以按逗号分隔来截取出来?

解决方案 »

  1.   


    SELECT * FROM tablename WHERE in (@a)不好意思 打错了
      

  2.   

    --1.数据类型转换的问题
    DECLARE @value int
    SET @value=100DECLARE @sql varchar(8000)
    SET @sql='SELECT * FROM tbname WHERE col='+@value
    EXEC(@sql)
    GO
    /*======================================================*/--2.字符串边界符的问题
    DECLARE @value varchar(10)
    SET @value='aa'DECLARE @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
    SET @sql1='SELECT * FROM tbname WHERE col1='+@value
    SET @sql2='SELECT * FROM tbname WHERE col1=''+@value+'
    SET @sql3='SELECT * FROM tbname WHERE col1='''+@value+''''
    GODECLARE @value varchar(10)
    SELECT @value='a''a'DECLARE @sql varchar(8000)
    SET @sql='SELECT * FROM tbname WHERE col='''+@value+''''
    EXEC(@sql)
    GO
    /*======================================================*/--3.表名及字段名的问题
    DECLARE @tbname sysname
    SET @tbname='sysobjects'
    SELECT * FROM @tbname
    GODECLARE @tbname sysname
    SET @tbname='sysobjects'
    EXEC sp_executesql N'SELECT * FROM @tbname',N'@tbname sysname',@tbname
    GO
    /*======================================================*/--4.返回值的问题
    DECLARE @tbname sysname,@sql varchar(100)
    SET @sql='SELECT @tbname=name FROM sysobjects where id=1'
    EXEC(@sql)
    SELECT @tbname
    GO
    DECLARE @tbname sysname,@sql varchar(100)
    SET @sql='SELECT '+@tbname+'=name FROM sysobjects where id=1'
    EXEC(@sql)
    SELECT @tbname
      

  3.   


    SELECT * FROM tablename WHERE colName in (@a)
      

  4.   

    SELECT * FROM tablename WHERE id in (@a)其类型根据ID来定.
    如果是数值
    @a = '1,2,3'
    如果是字符
    @a = ''1','2','3''
    SELECT * FROM tablename WHERE id in (@a)
      

  5.   

    declare @s varchar (1000)set @s=@a
    print @a这里的@a是ReportingServices中传过来的全选参数
    在MSDN上 他能作为IN后面的条件

    为什么我通过上面的方式打印不出来
      

  6.   

    如果@a是一个变量的话用=号就可以了 
    一般in里的都是用select语句获得的集合
    tablename在某一个集合里
    类型当然和tablename一样了