日期:2014-05-18  浏览次数:20364 次

自定义函数中的问题,比较难!
一个自定义函数,有两个参数,一个传递表的名称,一个传递表内关键字值
函数功能是要根据参数返回指定表指定关键字的记录的字段值?
难点是:
因为查询语句必须是动态组建的,但是
函数中不支持Exec,

------解决方案--------------------
这样的问题已经有人问过多遍了,动态SQL需要使用EXEC,而至少在SQLSERVER2000中是无法用函数来解决的,只能使用存储过程.
------解决方案--------------------
--在函数中使用动态语句需要使用exec sp_executesql来执行
CREATE FUNCTION ParentFullPath(@ParentTableName as varchar(50),@id as int)
RETURNS varchar(500) AS
BEGIN
declare @strSQL as varchar(500)
Declare @Val varchar(500),@RetVal varchar(50)
Set @RetVal= ' '
WHILE @id> 0
BEGIN
set @strSQL= 'select @id1=FParentID from @ParentTableName1 where FID=cast(@id2 as varchar(10)) '
--exec(@strSQL)--这样也不允许
-- 在函数中调用动态语句要使用sp_executesql
exec sp_executesql @strSQL,N '@id1 int output,@ParentTableName1 varchar(50),@id2 int ',
@id1=@id output,@ParentTableName1=@ParentTableName,@id2=@id

--Select @id=FParentID,@Val=isnull(FName, ' ') From @ParentTableName Where FID=@id --这样不允许

if @id is null
Break
else
Set @RetVal=@Val+case when @RetVal <> ' ' then '\ ' else ' ' end + @RetVal
END
Return(@RetVal)
END