以下两个存储过程都正确的
一:
create  proc test
@table varchar(200)
as
declare @sql varchar(max)
set @sql='select  *  from '+@table
exec(@sql)
二:
if object_id (N'dbo.test', N'procedure') is null
  Begin
    declare @sql varchar(max) 
    set @sql = 'create procedure test @pram varchar(20) as select * from users where ID=@pram '
    execute(@sql) 
  End
现在想合并一、二:
if object_id (N'dbo.test', N'procedure') is null
  Begin
    declare @sql varchar(max),@table varchar(200)
    set @sql = 'create procedure test @pram varchar(20) as select * from '+@table+' where ID=@pram '
    execute(@sql) 
  End
执行通过,但是没有创建存储过程  应该怎么改SQL存储

解决方案 »

  1.   


    if object_id(N'dbo.test', N'procedure') is null
    Begin
      declare @sql varchar(max),@table varchar(200)
      set @table='[表名]'  --> 变量@table要先初始化值
      set @sql='create procedure test @pram varchar(20) as select * from '+@table+' where ID=@pram '
      exec(@sql)
    End
      

  2.   

    IF EXISTS (SELECT name FROM sysobjects
             WHERE name = 'test' AND type = 'P')
       DROP PROCEDURE test
    go
    create  proc test
    @table varchar(200)
    as
    declare @sql varchar(max)
    set @sql='select  *  from '+@table
    exec(@sql)
    这样子可以的 但是我不想先删除再创建   
      

  3.   

    create  proc p_test
    @table varchar(200)
    as
    if object_id (N'dbo.test', N'procedure') is null
    Begin
        declare @sql varchar(1000) 
        set @sql = 'create procedure test @pram varchar(20) as select * from  '+@table+' where ID=@pram '
        execute(@sql) 
    END
      

  4.   

    这个貌似没有解决我的问题 执行这个创建了P-test test没创建 我调用时怎么调用 而且我要判断p_test是否存在 就又回到原先的问题上了
      

  5.   


    alter proc test
    @table varchar(200)
    as
    declare @sql varchar(max)
    set @sql='select  *  from '+@table
    exec(@sql)
      

  6.   

    谢谢两位帮忙 
    alter proc test
    @table varchar(200)
    as
    declare @sql varchar(max)
    set @sql='select  *  from '+@table
    exec(@sql)
    没有判断呀
      

  7.   

    我看到网上有关判断存储过程是否存在的例子 都包含drop表的句子  我不懂存储过程  难道大家每次调用都删除再创建  ?
      

  8.   

    clear;
    add('create  procedure getinfo');
    add('@pram varchar(20),@table varchar(20),@ID int ');
    add('as ');
    add('declare @sql varchar(max)');
    add('set');
    add('@sql='select @pram  from '+@table+'where ID=@ID'');这句怎么写 '+@table+'
    end;
    execSQL;
      

  9.   

    add('if exists (select 1 from sysobjects where name=''GetList'' and type=''p'')');
    add('drop procedure GetList');
    EXECSQL;
    Close;
    clear;
    add('create procedure GetList');
    add('@table varchar(20),@classes varchar(20)');
    add('as');
    add('begin');
    add('declare @sql as varchar(100) ');
    add('set @sql=''select * from ''+@table+'' where 1=1'' ');
    add('IF(@classes<>0)');
    add('set @sql = @sql+''and classes='' + @classes');
    add('exec(@sql)');
    add('end');