刚刚70分发完了借了ID再发。函数变量问题,关于参数的能不是实现以下功能:
表名:tb1
字段名:filed1
字段名:filed2create function mysum(@tb varchar(20),@field varchar(100))
returns int
as
begin
  declare @sum1 int 
  set @sum1=0
  select sum(@field) from @tb
  return @sum1
endselect  field1,mysum('tb1','field1+field2')  from tb上面的语句在执行的时候是有错误的。比如说sum不能操作字符等
我要达到的目的是给函数传入表名和字段名,因为我需要累加的操作非常多,如果每个都写一个函数的话非常的麻烦,能不能实现我想实现的功能?

解决方案 »

  1.   

    Create function mysum(@tb varchar(20),@field varchar(100))
    returns int
    as
    begin
      declare @sum1 int ,@sql nvarchar(4000)
      set @sum1=0
      set @sql=N'select @sum1=IsNULL(sum('+@field+'),0) from '+@tb
      exec sp_executesql @sql,N'@sum1 int out',@sum1 out
      return @sum1
    endselect  field1,mysum('tb1','field1+field2')  from tb
      

  2.   

    SQLSERVER2000自定义函数中只能使用EXEC来执行扩展存储过程,而不能用来执行系统存储过程或字符串.所以,应该象楼上朋友说的那样,使用存储过程.例如:
    create proc sp_mysum(@tb varchar(20),@field varchar(100))
    as
    declare @sql varchar(4000)  
    set @sql= 'select field1,ISNULL(sum(' + @field + '),0) from ' + @tb
    exec(@sql)GO