CREATE PROCEDURE dbo.search_ink
@a int,
@ink_no varchar(8),
@table varchar(8),
@all varchar(8)
 AS
if @a=0 
select * from @table
else
select * from @table where INK_NO=@ink_no
go我的意思是表也用变量传递!!不知道SQL可不可以,我这边是有提示错,要定义@TABLE
还是我的格式不对??在线等

解决方案 »

  1.   

    不可以 使用
    Select @SQL=""
    Exectue @Sql
      

  2.   

    if @a=0 
    exec ('select * from '+@table)
    else
    exec ('select * from '+@table+' where INK_NO='+@ink_no)
      

  3.   

    一个语句可以。但还是动态语句,因为你的表是不定的。
    我上面的打错了,更正一下
    exec ('select * from '+@table+' where INK_NO='''+@ink_no+'''')
      

  4.   

    如果存储过程中要使用通过参数传递过来的表名称字符串或列名称字符串,则必须通过字符串连接生成一个SQL语句字符串,然后用EXEC执行该字符串,即动态SQL.
    请参见http://community.csdn.net/Expert/topic/4869/4869265.xml?temp=.5164453
    CREATE PROCEDURE dbo.search_ink
    @a int,
    @ink_no varchar(8),
    @table varchar(8),
    @all varchar(8)
    AS
    if @a=0 
        exec('select * from ' + @table)
    else
        exec('select * from ' + @table + ' where INK_NO= ''' + @ink_no + ''''        /*注意:墨水号是字符型的,必须用一对单引号将@ink_no括起来.假设@table等于'inkname',则生成的语句类似于: select * from inkname where INK_NO = 'J100',如果不加一对单引号,则生成的语句类似于:select * from inkname where INK_NO = J100,可能会导致错误*/
    go
      

  5.   

    不怕糊涂,楼主参考一下
    http://community.csdn.net/Expert/topic/4869/4869265.xml?temp=.5164453
    里面有个例子对"混乱"的单引号进行了分析.