CREATE   procedure   Pro_Update_Rs   
(@tablename1   varchar(50),   
@name   varchar(50),   
@fieldname1   varchar(50), 
@fieldname2   varchar(50), 
@id   int, 
@outcheck   char(3)   OUTPUT)   as   
declare   @sql     varchar(1000) 
set   @sql='select     *     from   '+@tablename1+'     where   '+@fieldname1+'='''+@name+'''   and   '+@fieldname2+' <> '+ltrim(@id) 
if   exists(@sql)   
      select   @outcheck='yes' 
else   
    select   @outcheck='no' GO 以上过程怎么总是说: 
错误:107   @sql附近有语法错误,else附近有语法错误
该怎么解决呢?

解决方案 »

  1.   

    create table tb(id int,col varchar(10))
    goCREATE       procedure       Pro_Update_Rs       
    (@tablename1       varchar(50),       
    @name       varchar(50),       
    @fieldname1       varchar(50),   
    @fieldname2       varchar(50),   
    @id       int,   
    @outcheck       char(3)       OUTPUT)       as       
    declare       @sql           varchar(1000)   
    set       @sql='select @I=count(1) from '+@tablename1+' where '+@fieldname1+'='''+@name+''' and  '+@fieldname2+' <> '+ltrim(@id)   
    declare @i int
    exec sp_executesql @sql,N'@i int output',@i outputif       @i > 0      
                select       @outcheck='yes'   
    else       
            select       @outcheck='no'   GO   
    drop table tb
      

  2.   

    create table tb(id int,col varchar(10))
    insert tb select 1,'a'goCREATE       procedure       Pro_Update_Rs       
    (@tablename1       varchar(50),       
    @name       varchar(50),       
    @fieldname1       varchar(50),   
    @fieldname2       varchar(50),   
    @id       int,   
    @outcheck       char(3)       OUTPUT)       as       
    declare       @sql           nvarchar(1000)   
    set       @sql=N'select @I=count(1) from '+@tablename1+' where '+@fieldname1+'='''+@name+''' and  '+@fieldname2+' <> '+ltrim(@id)   
    declare @i int
    exec sp_executesql @sql,N'@i int output',@i outputif       @i > 0      
                select       @outcheck='yes'   
    else       
            select       @outcheck='no'   GO   
    declare @s varchar(10)exec Pro_Update_Rs 'tb','a','col','id',3, @s out
    print @s
    drop proc Pro_Update_Rsdrop table tb/*
    (所影响的行数为 1 行)yes*/
      

  3.   


    declare @fname varchar(10),@lname varchar(10),@s varchar(1000)
    set @fname='Paolo'
    set @lname='Cruz'
    set @s='select 1 as aa into ##t  from employee where fname='''+ @fname +''' or lname='''+@lname+''''
    exec (@s)
    if exists (select 1 from ##t )
       print '1'
    else 
       print '2'/*(所影响的行数为 2 行)1*/
      

  4.   


    /*
    CREATE       procedure       Pro_Update_Rs       
    (@tablename1       varchar(50),       
    @name       varchar(50),       
    @fieldname1       varchar(50),   
    @fieldname2       varchar(50),   
    @id       int,   
    @outcheck       char(3)       OUTPUT)       as       
    declare       @sql           varchar(1000)   
    set       @sql='select           *           from       '+@tablename1+'           where       '+@fieldname1+'='''+@name+'''       and       '+@fieldname2+'   <>   '+ltrim(@id)   
    if       exists(@sql)       
                select       @outcheck='yes'   
    else       
            select       @outcheck='no'   GO   
    */CREATE       procedure       Pro_Update_Rs       
    (@tablename1       varchar(50),       
    @name       varchar(50),       
    @fieldname1       varchar(50),   
    @fieldname2       varchar(50),   
    @id       int,   
    @outcheck       char(3)       OUTPUT)       as       
    declare       @sql           varchar(1000)   
    set       @sql='select           *     into ##t      from       '+@tablename1+'           where       '+@fieldname1+'='''+@name+'''       and       '+@fieldname2+'   <>   '+ltrim(@id)   
    exec(@sql)
    if       exists(select 1 from ##t)       
                select       @outcheck='yes'   
    else       
            select       @outcheck='no'   GO   
      

  5.   

    可以利用常量来判断是否存在返回记录集@@RowCountCREATE       procedure       Pro_Update_Rs       
    (@tablename1       varchar(50),       
    @name       varchar(50),       
    @fieldname1       varchar(50),   
    @fieldname2       varchar(50),   
    @id       int,   
    @outcheck       char(3)       OUTPUT)       as       
    declare       @sql           varchar(1000)   
    set       @sql='select           *           from       '+@tablename1+'           where       '+@fieldname1+'='''+@name+'''       and       '+@fieldname2+'   <>   '+ltrim(@id) 
    --此处与楼主不同
    exec(@sql)  
    if      @@rowcount>0       
                select       @outcheck='yes'   
    else       
            select       @outcheck='no'   GO   
      

  6.   


    ALTER              procedure       Pro_Update_Rs(   
    @tablename1       varchar(50),      
    @fieldname1       varchar(50),
    @name        varchar(50),   
    @fieldname2       varchar(50),  
    @id        varchar(10),  
    @outcheck        char(3)       OUTPUT
    ) as declare  @sql  nvarchar(1000) 
    declare @out int 
    set @sql='select @i=count(*) from '+ @tablename1 + ' where ' + @fieldname1 + '= '''+ @name + ''' and '
    + @fieldname2 + ' = ''' +@id + ''''execute sp_executesql @sql,N'@i int output',@out outputif @out>=1
    set @outcheck='yes'
    else
    set @outcheck='no'select @outcheck as 结果