调用返回表函数的问题

siaosa 2010-01-05 11:15:41
有函数
create function abc
(@a1 varchar(20),
@a2 varchar(20)
)
returns @t table (f1 varchar(10),f2 varchar(10),f3 varchar(10))
as
BEGIN
........
insert @t select f1,f2,f3 from tab1
.....
return
END
该函数正确保存,在企业管理器和SQL查询分析器中能看到

现在在sql查询分析器中调用该函数时发现
select dbo.abc(tab2.ff,tab2.cc) from tab2
提示 服务器:消息208,级别16,状态1,行1
对象 dbo.abc无效

执行
select dbo.abc('aaaa','bbbbb')
也提示: 对象 dbo.abc无效

...全文
77 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
水族杰纶 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 siaosa 的回复:]
那用什么方法可以实现类似的需求啊
[/Quote]
關鍵看你函數要實現什麼功能
要返回的是什麼~~
siaosa 2010-01-05
  • 打赏
  • 举报
回复
那用什么方法可以实现类似的需求啊
水族杰纶 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 siaosa 的回复:]
wufeng4552
如果我一定要这样调用
select dbo.abc(tab2.ff,tab2.cc) from tab2
有什么办法可以解决没有
[/Quote]
如果dbo.abc(tab2.ff,tab2.cc)返回的是表 就不能這樣用
如果返回字值則可以
siaosa 2010-01-05
  • 打赏
  • 举报
回复
主要是想用一个函数或者存储过程处理一张表的内容
siaosa 2010-01-05
  • 打赏
  • 举报
回复
wufeng4552
如果我一定要这样调用
select dbo.abc(tab2.ff,tab2.cc) from tab2
有什么办法可以解决没有
水族杰纶 2010-01-05
  • 打赏
  • 举报
回复
樓主要區分標量函數與表值函數
--標量函數
select dbo.abc(...)
--or
select dbo.abc(...) from tab2
--表值函數
select * from dbo.abc(...)
siaosa 2010-01-05
  • 打赏
  • 举报
回复
如果我一定要这样调用
select dbo.abc(tab2.ff,tab2.cc) from tab2
有什么办法可以解决没有
dawugui 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 siaosa 的回复:]
select dbo.abc(tab2.ff,tab2.cc) from tab2
这样调用为什么不可以?
[/Quote]
你返回的是一个表(变量)
所以得如一楼那么用.

如果返回的是一个值,可以如你那么用.
--小F-- 2010-01-05
  • 打赏
  • 举报
回复
你的是表值函数 不能这么用的
dawugui 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 siaosa 的回复:]
select dbo.abc(tab2.ff,tab2.cc) from tab2
这样调用为什么不可以?
[/Quote]
你返回的是一个表(变量)
所以得如一楼那么用.

如果返回的是一个值,可以如你那么用.
siaosa 2010-01-05
  • 打赏
  • 举报
回复
select * from dbo.abc('aaaa','bbbbb')
这样调用可以正常使用

但我想这样用
select dbo.abc(tab2.ff,tab2.cc) from tab2
jack15850798154 2010-01-05
  • 打赏
  • 举报
回复
学习!
--小F-- 2010-01-05
  • 打赏
  • 举报
回复
select * from dbo.abc('aaaa','bbbbb')
siaosa 2010-01-05
  • 打赏
  • 举报
回复
select * from dbo.abc('aaaa','bbbbb')
这样调用可以正常使用

但我想这样用
select dbo.abc(tab2.ff,tab2.cc) from tab2
siaosa 2010-01-05
  • 打赏
  • 举报
回复
select dbo.abc(tab2.ff,tab2.cc) from tab2
这样调用为什么不可以?
guguda2008 2010-01-05
  • 打赏
  • 举报
回复
你的函数返回的是表值,怎么能在行上调用呢,只能像1L2L那样SELECT * FROM DBO.abc
可以把函数的返回值与现有表连接得到你想要的结果
水族杰纶 2010-01-05
  • 打赏
  • 举报
回复
select * from  dbo.abc('aaaa','bbbbb') 
百年树人 2010-01-05
  • 打赏
  • 举报
回复
select * from dbo.abc('aaaa','bbbbb') 

34,591

社区成员

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

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