为什么提示'只有函数和扩展存储过程才能从函数内部执行。'看不懂

hstod 2003-07-10 12:24:00
我自定义了函数 如下
CREATE function GetNewID (@ATable nchar(200))
returns decimal(9,0)
as
Begin
declare @MaxId decimal(9,0),@sql nchar(200)
set @sql= 'Select @Maxid=Max(id) from '+@ATable
exec sp_executesql @sql
if @MaxId is Null
set @Maxid=0
else
set @Maxid=@Maxid+1

return (@Maxid)
End
调用时如下
Select dbo.GetNewId('tiaozaoshichan')
可是一运行就提示'只有函数和扩展存储过程才能从函数内部执行。'
为什么 急
...全文
2077 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-09-05
  • 打赏
  • 举报
回复
动态SQL不能在function中运行,换成存储过程吧。
stephen7404 2003-09-05
  • 打赏
  • 举报
回复
如果你要这样,就用store procedure代替你的function,在store procedure中可以用exec
直接运行一条sql语句。可是你可能要用两个store procedure才能达到你现在function的功能了^_^。
hstod 2003-07-10
  • 打赏
  • 举报
回复
Select dbo.GetNewId('tiaozaoshichan')
那怎样让这句通过呢??
急呀
CrazyFor 2003-07-10
  • 打赏
  • 举报
回复
常规扩展过程
xp_cmdshell xp_logininfo
xp_enumgroups xp_msver
xp_findnextmsg xp_revokelogin
xp_grantlogin xp_sprintf
xp_logevent xp_sqlmaint
xp_loginconfig xp_sscanf
CrazyFor 2003-07-10
  • 打赏
  • 举报
回复
未在下面的列表中列出的语句不能用在函数主体中。

赋值语句。


控制流语句。


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


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


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


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


EXECUTE 语句调用扩展存储过程。
hstod 2003-07-10
  • 打赏
  • 举报
回复
有人会没有呀
hstod 2003-07-10
  • 打赏
  • 举报
回复
sp_executesql
是这个存储过程的事
那怎么改呢??
我要动态调用sql语句呀

34,873

社区成员

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

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