IF EXISTS (SELECT name 
   FROM   sysobjects 
   WHERE  name = N'N_newrecord' 
   AND    type = 'P')
    DROP PROCEDURE N_newrecord
GOCREATE PROCEDURE N_newrecord
( @Tname     [nvarchar](20),                             
  @Fname     [nvarchar](20),     
  @newID     [int]  output )
AS
exec('select @newID= max('+@Fname+')+1 from '+@Tname)
exec('insert into '+@tname+'('+@Fname+') values('+@newID+')')  
go调用时报错: 
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@newID'。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ')' 附近有语法错误。不要光说原因,大家帮忙解决一下,答对者另外给分,呵呵

解决方案 »

  1.   

    IF EXISTS(SELECT name FROM sysobjects WHERE  type='P' and name='CrtProc_Move###')
         DROP PROCEDURE CrtProc_Move###
      

  2.   

    別在刪除後加 Go將你這個過程放在另外過程中調用,即刪除的放在一存儲過程內,存儲過程內內容放一過程中,在建產過程時必須將CREATE PROCEDURE 語句作為第一行有效語句
      

  3.   

    CREATE      PROCEDURE usp_CreateProc_Move
    @Where VARCHAR(255),
    @User VARCHAR(50),
    @Section VARCHAR(50)
    ASDECLARE @Single_No VARCHAR(50),@Disp_No VARCHAR(50) ,@Route_No VARCHAR(50),@Ret INT,@IsFirst bit --是否為第一工序SET @Ret=0IF EXISTS(SELECT name FROM sysobjects WHERE  type='P' and name='CrtProc_Move###')
         DROP PROCEDURE CrtProc_Move###
    EXEC('CREATE  PROCEDURE CrtProc_Move### @curMove CURSOR VARYING OUTPUT AS SET @curMove= CURSOR FOR SELECT Single_No,'+
    'PrevRoute_No,IsFirst  FROM Dispatch WHERE  Status='+''''+'未完'+''''+'  AND Single_No NOT IN (SELECT Disp_No FROM Proc_Movec) '+
    @Where+'   OPEN @curMove')
      

  4.   

    这个样子就可以了
    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = N'N_newrecord' 
       AND    type = 'P')
        DROP PROCEDURE N_newrecord
    GOCREATE PROCEDURE N_newrecord
    ( @Tname     [nvarchar](20),                             
      @Fname     [nvarchar](20),     
      @newID     [int]  output )
    AS
    exec('declare @new_ID int 
    select @new_ID= max('+@Fname+')+1 from '+@Tname +'
     insert into '+@tname+'('+@Fname+') values (@new_ID)')go
      

  5.   

    我只是在调试器中调试时写的,不要在无谓的问题上纠缠不休好不好?
    现在是
    exec('select @newID= max('+@Fname+')+1 from '+@Tname)
    exec('insert into '+@tname+'('+@Fname+') values('+@newID+')')
    这儿出错,我要的功能不能实现
      

  6.   

    我骂的是Bes96261(秋水孤鶩)刷新太慢了,不好意思
      

  7.   

    up caoyq!
    exec把()中的内容作为一个存储过程进行处理,所以引号中的变量,必须在内部声明,我刚才才试过!
    不巧,晚了!不好意思!嘿嘿1