结掉上一个帖子,提出新的问题,函数与存储过程的区别是什么?

m00ners 2006-12-16 09:02:45
我看到SQL Server帮助上写道有时候自定义函数可以代替存储过程,
但我想问的是,什么时候只能用存储过程而不能使用函数?
另外自定义函数如何用数据库表名和列名作为输入的参数???


...全文
253 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
m00ners 2006-12-19
  • 打赏
  • 举报
回复
感谢楼上各位的解答,下班前结贴。
bugchen888 2006-12-16
  • 打赏
  • 举报
回复
但我想问的是,什么时候只能用存储过程而不能使用函数?
另外自定义函数如何用数据库表名和列名作为输入的参数???
------------------------------------------------------------

第一个问题,两种情况下只能用存储过程:
1.要执行DML,修改数据.
2.要执行动态SQL语句,执行任何存储过程.

第二个问题,用什么东西做为自定义函数的传入参数无所谓,关键是你想在函数中怎么用这些参数,如果你是想执行动态SQL,请参考第一个问题的回答.
m00ners 2006-12-16
  • 打赏
  • 举报
回复
学习ing
libin_ftsate 2006-12-16
  • 打赏
  • 举报
回复
另外自定义函数如何用数据库表名和列名作为输入的参数???

上面的看错了,用数据库表名和列名作为输入的参数大部分情况会用到动态sql,所以大部分情况不可以的。
有个例外,如下函数是求表的行数的,利用系统表

create function fn_Rows(
@TabName varchar(60)
)
returns int
as
begin
return (select rows from sysindexes where id=object_id(@TabName) and indid<2)
end
go

--调用
select dbo.fn_Rows('word')
libin_ftsate 2006-12-16
  • 打赏
  • 举报
回复
什么时候只能用存储过程而不能使用函数?

自定义函数有很多限制,在必须使用不确定函数,动态语句等函数限制的时候就必须使用存储过程

另外自定义函数如何用数据库表名和列名作为输入的参数???

标量函数可以
select ...,dbo.fn_name(col1,常量) as newcol
from tablename
表值函数不可以



xiaoku 2006-12-16
  • 打赏
  • 举报
回复
另外自定义函数如何用数据库表名和列名作为输入的参数???

-----------------
不行!只能使用 存储过程
marco08 2006-12-16
  • 打赏
  • 举报
回复
要执行动态SQL时就不能用自定义函数

34,587

社区成员

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

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