现在有一个函数,如下:
CREATE FUNCTION dbo.search_se(@id  nvarchar(10))
RETURNS nvarchar(300)
AS
BEGINDECLARE @re nvarchar(3000)     
            SET @re=''          
SELECT @re=@re+ '/'+  CAST(Bs as varchar)
FROM tableName
WHERE Id=@Id 
           return STUFF(@re,1,1,'')
END
现在tableName需要改变且该函数在多个存储过程中都调用。经过查资料发现函数内不能使用动态SQL。现在该怎么办?

解决方案 »

  1.   

    用存储过程也可以实现
    CREATE proc search_se 
    @id nvarchar(10),
    @re  nvarchar(3000)  output
    ASSET @re='' 
    SELECT @re=@re+ '/'+ CAST(Bs as nvarchar)
    FROM tableName
    WHERE Id=@Id 
      

  2.   

    学习了,我也遇到这个问题,我的tablename 是存储过程里面的临时表,函数还不支持临时表,郁闷
      

  3.   

    create  proc search_se 
    @id nvarchar(10),
    @tablename varchar(20),
    @re nvarchar(3000) output
    AS
    declare @sql nvarchar(4000)
    SET @re='' set @sql='SELECT @re=@re+ ''/''+ CAST(Bs as nvarchar) FROM '+@tableName+' WHERE s='+ltrim(@Id)
    exec sp_executesql @sql,N'@re nvarchar(3000) output',@re output
      

  4.   

    再请教一下chuifengde(树上的鸟儿) ,在select Bs=dbo.search_se(Id),ad  from T 的存储过程中如何调用