函数问题

zoulipeng 2005-06-29 05:28:19
select dbo.函数(a.column1,a.column2,a.column3) from 表 a

为什么不能执行?

服务器: 消息 208,级别 16,状态 1,行 1
对象名 'dbo.F_GetTable' 无效。

select * from dbo.函数(a,1,2) 执行正确!
...全文
113 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoulipeng 2005-06-30
  • 打赏
  • 举报
回复
非常感谢,该问题已解决。
揭贴!
vivianfdlpw 2005-06-30
  • 打赏
  • 举报
回复
这样的话可以用游标,不过性能很低

if exists(select 1 from [tempdb]..[sysobjects] where id=object_id('[tempdb]..[#]'))
drop table [tempdb]..[#]
go
create table #(列1 varchar(20),列2 datetime,列3 varchar(8000))
declare cur cursor for select column1,column2,column3 from 表
open cur
declare @column1 varchar(20)
declare @column2 varchar(20)
declare @column3 varchar(20)
fetch next from cur into @column1,@column2,@column3
while @@fetch_status=0
begin
insert # select * from [dbo].函数(@column1,@column2,@column3)
fetch next from cur into @column1,@column2,@column3
end
close cur
deallocate cur

select * from #
drop table #
zoulipeng 2005-06-30
  • 打赏
  • 举报
回复
函数很复杂,计算量比较大!无法返回一个记录集!
必须返回一个表!

有没有其它办法!!
hsj20041004 2005-06-29
  • 打赏
  • 举报
回复
那的把你的函数改一改。
不要返回一个表了 可以返回一个记录集。
zoulipeng 2005-06-29
  • 打赏
  • 举报
回复
CREATE function 函数(@字段1 as varchar(20),@字段2 as int ,@字段3 int)
returns @Time table(列1 varchar(20),列2 datetime,列3 varchar(8000))
as
begin
--一系列操作后,插入数据到@Time
end

select dbo.函数('a',1,2,3)

返回正确结果


现在我就是想把函数参数,换成一个表的变量来代替!!

select dbo.函数(a.column1,a.coulmn2,coulmn3,a.column4) from 表 a

就不行。请问怎么改?一定要改成标量函数吗??
hsj20041004 2005-06-29
  • 打赏
  • 举报
回复
把你的函数和表结构看看。
vivianfdlpw 2005-06-29
  • 打赏
  • 举报
回复
把这个函数改成标量函数
zoulipeng 2005-06-29
  • 打赏
  • 举报
回复
把表中的3列,数据传递到我的函数!!!!!
zoulipeng 2005-06-29
  • 打赏
  • 举报
回复
我的函数返回一个Table

函数参数要从另一个表中去取

coulumn1 coulun2 coumn3
a 1 2
b 1 3
c 2 4


把这个表中的,三列数据传递到我的表中的参数去

select * from dbo.函数(参数1,参数2,参数3)

函数返回的是一个表!!!!!
zoulipeng 2005-06-29
  • 打赏
  • 举报
回复
那应该怎么处理呢???谢谢!
vivianfdlpw 2005-06-29
  • 打赏
  • 举报
回复
如果你的函数是表值函数的话,不能出现在select的选择列表中
vivianfdlpw 2005-06-29
  • 打赏
  • 举报
回复
唤醒调用返回表数据类型的用户定义函数
可唤醒调用返回表 (table) 的用户定义函数,其中在 SELECT、INSERT、UPDATE 或 DELETE 语句的 FROM 子句中允许表表达式。可在调用返回表的用户定义函数后加上可选的表别名。下例说明如何唤醒调用函数 fn_Products 和指派别名:

SELECT OD.OrderID, OD.ProductID, fnPr.Price
FROM OrderDetails as OD, fn_Products('Discontinued') AS fnPr
WHERE OD.ProductID = fnPr.ProductID
ORDER BY OD.OrderID, OD.ProductID

当在子查询的 FROM 子句中唤醒调用返回表的用户定义函数时,函数参数不能引用外部查询中的任何列。

若 SELECT 语句的 FROM 子句引用了返回表的用户定义函数,则静态的只读游标是可在该 SELECT 语句上打开的唯一游标类型。

引用返回表 (table) 的用户定义函数的 SELECT 语句唤醒调用该函数一次。

34,576

社区成员

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

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