create   FUNCTION dbo.f_rq(@rq varchar(20),@bl varchar(20)) 
RETURNS varchar(100) 
AS 
BEGIN 
    DECLARE @re varchar(100) 
    SET @re='' 
SELECT @re=@re+rtrim(货物) 
    FROM hw 
    WHERE ' + @bl + '= @rq
    RETURN(@re) 
END 

解决方案 »

  1.   

    eg:
    declare @sqlstr nvarchar(4000),@return int
         set @sqlstr = 'select @result=1 from  ' + @tablename + ' where '+ @columnname +'= '''+@columnvalue + ''''
         exec sp_executesql @sqlstr,N'@result int output',@return output
         RETURN @return
      

  2.   

    函数里不能用exec
    在存储过程里面去用.
      

  3.   

    ALTER   FUNCTION dbo.f_rq(@rq varchar(20),@bl varchar(20)) 
    RETURNS varchar(100) 
    AS 
    BEGIN 
        DECLARE @re varchar(100) ,@sql nvarchar(1000)
     
        SET @re='' 
        set @sql = N'SELECT @re=@re+rtrim(货物) 
        FROM hw 
        WHERE ' + @bl + '= @rq'
        exec sp_executesql @sql,N'@re varchar(100) output',@re output    RETURN(@re) 
    END 
      

  4.   

    create table a(name varchar(10))
    insert into a select '王'create proc pr_rq
    @name varchar(20),@value varchar(20)
    as
    exec('select * from a where '+@name+'='''+@value+'''')exec pr_rq 'name','王'王
      

  5.   

    这一段代码有问题
    exec ('SELECT @re=@re+rtrim(货物) 
        FROM hw 
        WHERE ' + @bl + '= @rq') 
    因为你这里执行的是一个SQL字符串,所以,你只要把语句改成:
    exec ('SELECT '+@re=@re+'rtrim(货物) 
        FROM hw 
        WHERE ' + @bl + '= '+@rq) 如还有问题欢迎交流。
      

  6.   

    修改一下:这一段代码有问题 
    exec ('SELECT @re=@re+rtrim(货物)  
        FROM hw  
        WHERE ' + @bl + '= @rq')  
    因为你这里执行的是一个SQL字符串,所以,你只要把语句改成: 
    exec ('SELECT '+@re+'='+@re+'rtrim(货物)  
        FROM hw  
        WHERE ' + @bl + '= '+@rq)  如还有问题欢迎交流。
      

  7.   


    在存储过程里面用动态的sql
      

  8.   

    发现楼主的总是只有改成过程用动态SQL来实现
    函数无法达到你的要求,至少在2000下无法实现
      

  9.   

    [Quote=引用 7 楼 
    [/Quote]
      

  10.   

    写储存过程也可以啊 
    不是就返回一个 变量的值吗 用 EXECUTESQL 的OUTPUT  返回也可以declare @rq varchar(20),@bl varchar(20)
    declare @sql nvarchar(1000)
    declare @re varchar(100)
    set @re=''
    set @sql='SELECT @re=@re+rtrim(货物) FROM hw WHERE '+@bl+'='+@rqexec sp_executesql @sql,N'@re nvarchar(1000) output',@re outputselect @re