你把function改成下面的试试,;)create function delTable(@n varchar(20))
returns int
as
  begin
    declare @v int
    declare @sql varchar(30)
    
    set @sql='drop table' + @n
    exec sp_executesql @sql
    if @@error <> 0
      set @v = 0
    else
      set @v = 1
    
    return @v
  end    
go

解决方案 »

  1.   

    运行下面程序:
    if exists(select name from sysobjects where name='delTable' and xtype='FN')
      drop function delTable
    gocreate function delTable(@n varchar(20))
    return int
    as
      begin
        declare @v int
        exec('drop table '+@n)
        if @@error <> 0
           @v = 0
        else
           @v = 1
        return @v
      end    
    go
    Server: Msg 156, Level 15, State 1, Procedure delTable, Line 3
    Incorrect syntax near the keyword 'return'.
    Server: Msg 170, Level 15, State 1, Procedure delTable, Line 9
    Line 9: Incorrect syntax near '@v'.
    Server: Msg 178, Level 15, State 1, Procedure delTable, Line 13
    A RETURN statement with a return value cannot be used in this context.
      

  2.   

    @v用set @v赋值,你把我上面写的那个函数替换你的create function delTable(@n varchar(20))
    函数,试了吗??
      

  3.   

    create table oneTable(id int)
    create table twoTable(id varchar(5))
    create table threeTable(id char(5))if exists(select name from sysobjects where name='delTable' and xtype='FN')
      drop function delTable
    gocreate function delTable(@n varchar(20))
    returns int
    as
      begin
        declare @v int
        exec('drop table '+@n)
        if @@error <> 0
           set @v = 0
        else
          set @v = 1
        return @v
      end    
    goselect name into #tmp from sysobjects where xtype='u' and name like '%le'
    select dbo.delTable(name) from #tmp
      

  4.   

    改了一下怎么还有错误:
    if exists(select name from sysobjects where name='oneTable' and xtype='U')
        drop table oneTable
    if exists(select name from sysobjects where name='twoTable' and xtype='U')
        drop table twoTablecreate table oneTable(id int)
    create table twoTable(id varchar(5))if exists(select name from sysobjects where name='delTable' and xtype='FN')
      drop function delTable
    gocreate function delTable(@n varchar(20))
    returns int
    as
      begin
        declare @v int
        declare @sql varchar(30)
        
        set @sql='drop table' + @n
        exec sp_executesql @sql
        if @@error <> 0
          set @v = 0
        else
          set @v = 1
        
        return @v
      end    
    godrop table #tmp
    select name into #tmp from sysobjects where xtype='u' and name like '%le'
    select dbo.delTable(name) from #tmp提示错误:
    Server: Msg 557, Level 16, State 2, Procedure delTable, Line 10
    Only functions and extended stored procedures can be executed from within a function.