急!如何在函数中动态执行select

z_j 2003-12-05 09:27:45
知道用 execute sp_executesql 动态的执行一个 sql语句,但是在函数中,不能调用存储过程,有谁能给个提示,如何在
函数中动态执行一个 select ,并返回结果,类似于:
f_test ( @sql varchar(255)
returns decimal(20,4)
as
begin
declare @ret decimal(20,4)
.....动态执行 @sql
return @ret
end

----------------

select dbo.f_test ("select max(id) from table1")
...全文
41 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-12-05
  • 打赏
  • 举报
回复
没办法,或者贴出数据结构,举例说明你的要求,看有没有其他办法.
z_j 2003-12-05
  • 打赏
  • 举报
回复
之所以要用函数,是需要实现类似如下的功能:
select tablename , dbo.f_test( 'select count(*) from'+ tablename) from tableconfig

如果用存储过程,就需要打开 tableconfig,然后 fetch ,再 execute sp_exe....
zjcxc 元老 2003-12-05
  • 打赏
  • 举报
回复
未在下面的列表中列出的语句不能用在函数主体中。

赋值语句。


控制流语句。


DECLARE 语句,该语句定义函数局部的数据变量和游标。


SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。


游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。


INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。


EXECUTE 语句调用扩展存储过程。
zjcxc 元老 2003-12-05
  • 打赏
  • 举报
回复
没办法,只能用存储过程.
shuiniu 2003-12-05
  • 打赏
  • 举报
回复
--只能改用过程
create proc p_test @sql Nvarchar(4000),@result decimal(20,4) output
as
begin
exec sp_executesql @sql,N'@a decimal(20,4) output',@result output
end
go
pengdali 2003-12-05
  • 打赏
  • 举报
回复
create proc sp_test
@sql Nvarchar(4000),
@result decimal(20,4) output
as
begin
exec sp_executesql @sql,N'@a decimal(20,4) output',@result output
end
go
----------------

--调用:
declare @a decimal(20,4)
exec sp_test 'select @a=max(id) from table1',@a output

select @a 结果
pengdali 2003-12-05
  • 打赏
  • 举报
回复
没有办法只有用存储过程

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧