在自定义函数中不可以使用EXECUTE(),如何用其他方法解决?

zhouhuajian 2004-04-30 02:43:59
以前在存储过程中通过使用EXECUTE()动态执行命令,做成函数时总提示不正确使用EXECUTE()函数,查帮助是不能使用这类内置函数,请问如何用其他方式解决呢?
...全文
57 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ghosthjt 2004-04-30
用存储过程方便一些,估计你可能考虑到存储过程结果集使用不是很方便,但有像你要的效果好像也只能用存储过程。关于怎样使用存储过程的结果集,请看下面贴子:
http://expert.csdn.net/Expert/topic/3016/3016902.xml?temp=.9727289
  • 打赏
  • 举报
回复
用Dll很慢的﹐用存储过程比較好
  • 打赏
  • 举报
回复
txlicenhe 2004-04-30
用存储过程吧。
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
那个做不到,只能用存储过程,或自己写dll
  • 打赏
  • 举报
回复
zhouhuajian 2004-04-30
感谢楼上各位的帮助。
我是想传入函数一个表名,一个唯一值,函数自动返回该表的字段,其中主要用到
execute ('insert into @cursor select nodeid from '+@TableName+' where father='+STR(@fatherid))
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
具体是否一定要用动态SQL语句,需要看你的实际处理需求.

楼主不妨将实际处理需求说出来看看.
  • 打赏
  • 举报
回复
progress99 2004-04-30
要看你實際需求,有時可以找到變通的方法,如函數中實現top n,
函數中不能: exec('select top '+@num +....),但可以用以下方法處理


--函数的方法( zjcxc(邹建)):

Create function testfn(@counts int)
returns @temptable table(storeid int,storename varchar(50))
as
begin
declare @r table(id int identity(1,1),storeid int,storename varchar(50))
insert @r select * from stores
insert @temptable select storeid,storename
from @r where id<=@counts
return
end
go


--如果storeid 是主键,可以用:
Create function testfn(@counts int)
returns @temptable table(storeid int,storename varchar(50))
as
begin
insert @temptable
select storeid,storename
from stores a
where (select sum(1) from stores where storeid<=a.storeid)<=@counts
return
end
go
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
没有直接的解决方法,间接的解决方法是:

1.将要实现的功能写成DLL,然后在函数中就可以用exec调用

2.改存储过程.
  • 打赏
  • 举报
回复
8992026 2004-04-30
改回存储过程,自定义函数还是应该少用,限制多,效率低
  • 打赏
  • 举报
回复
klan 2004-04-30
自定义函数中不可以使用EXECUTE()的,我看你还是换个方法吧,用存储过程实现
  • 打赏
  • 举报
回复
outwindows 2004-04-30
gz...
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-04-30 02:43
社区公告
暂无公告