alter   function   dbo.fn_Merge
(
@filterColumnName varchar(200),
@filter uniqueidentifier,
@tableName varchar(200),
@mergeName varchar(200)

Returns   varchar(8000) 
as 
begin 
declare   @str   varchar(8000) 
declare @sql varchar(8000)
set   @str   =   ' ' 
set @sql = ''
set @sql = 'select ' + @str +  '/ ' + @mergeName   
+ ' from (select distinct ' + @mergeName  + ' from ' +  @tableName + ' ) bb where '
+  @filterColumnName + ' = ' +   @filterColumnName ;
exec sp_executesql @sql,@str output
set   @str   =   Stuff(@str, 1, 1, '');
return   @str 
end 

解决方案 »

  1.   

    exec   sp_executesql   @sql,@str   output --------
    函数里面用EXEC是有限制的,,,
      

  2.   

    执行动态SQL语句最好还是用存储过程吧,,,create proc dbo.sp_Merge 

    @filterColumnName   varchar(200), 
    @filter   uniqueidentifier, 
    @tableName   varchar(200), 
    @mergeName   varchar(200),
    @str varchar(8000) output 
    )
    as   
    begin   
    declare @sql varchar(8000) 
    set @str = ' '   
    set @sql = ' ' 
    set @sql = 'select ' + @str + '/ ' + @mergeName       
    +   ' from (select distinct ' + @mergeName + ' from ' + @tableName + ' ) bb where ' 
    +    @filterColumnName + ' = ' + @filterColumnName  
    exec sp_executesql   @sql,@str   output 
    set @str = Stuff(@str,   1,   1,   ' ')    
    end 
    go--for example
    declare @tableName   varchar(200), 
    @mergeName   varchar(200),
    @str varchar(8000)
    select @tableName='tablename',@mergeName='mergeName'  exec dbo.sp_Merge @tableName,@mergeName,@str outputselect @str