关于表值函数的参数传递问题——为什么不能传递列名作为参数

infinite 2003-09-04 05:57:27
我写了一个表值函数,参数是一个int类型的参数,当我传递一个类型是int的
列的名称给函数作为参数时无法通过编译,但传递一个数字可以。

请问各位大虾,我该怎么办?
...全文
290 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
infinite 2003-09-05
  • 打赏
  • 举报
回复
哎,看来你们还是没有搞懂我到底要问什么,看看标题吧。
不过谢谢各位了。
zjcxc 元老 2003-09-04
  • 打赏
  • 举报
回复
如果要将函数结果做为查询语句中的一部分来使用,你就必须用访问表的方法来使用它.


比如,要利用上面的函数来查询:
select * from 表
where treeid in(select * from dbo.fsplit('1,2,3,4',',')) --既然返回结果是表集,就要用表的方法去写.

而不能写成:
select * from 表 where treeid in dbo.fsplit('1,2,3,4',',') --这个写法就错了.


zjcxc 元老 2003-09-04
  • 打赏
  • 举报
回复
返回表是没有问题的.你看我的例子函数,返回的就是一个表集.

--创建字符串分拆的函数
create function fsplit(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @re table(istr varchar(8000))
as
begin
declare @i int,@splen int
select @splen=len(@spli)
,@i=charindex(@spli,@str)
while @i>0
begin
insert into @re values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
,@i=charindex(@spli,@str)
end
if @str<>'' insert into @re values(@str)
return
end
infinite 2003-09-04
  • 打赏
  • 举报
回复
谢谢各位的回答,不过还是没有满足我的需求。

我这个函数之所以要返回一个表,其实我是想返回一个类似于(1,2,3,4)的东西,
然后构成一个where条件 TreeId in (1,2,3,4), TreeId列是整数类型。
这样我就可以在实现在查询记录集时
用一条sql语句就可以实现判断某列所代表的树节点是否在允许的某棵变化的子树上了。
当然,这条sql语句是相当复杂了。
我以前试过用函数返回一个字符串,形如“1,2,3,4”的,但是这样sql server会报
类型不匹配的错误。于是才想到用函数返回一个表。
但是没想到这时传递列作为函数参数不行,所以才想问大家怎么能够把列作为参数
传递给表值函数(一般类型的返回值函数是没有问题的,这我也试过。)
zjcxc 元老 2003-09-04
  • 打赏
  • 举报
回复
不太理解楼主的意思
nboys 2003-09-04
  • 打赏
  • 举报
回复

create function f_name (@id int)
returns int
as
return @id
go


执行:
select dbo.f_name(是int的字段) from tableName
txlicenhe 2003-09-04
  • 打赏
  • 举报
回复
大力根本就不给别人机会。
yujohny 2003-09-04
  • 打赏
  • 举报
回复
大力回答的真快!!

pengdali 2003-09-04
  • 打赏
  • 举报
回复
函数内不能用exec,你可以这样用过程:

create table #临时表 (结构和返回结构相同)

insert #临时表 exec 你的过程 '参数'

select * from #临时表
pengdali 2003-09-04
  • 打赏
  • 举报
回复
create proc 过程名 (@列名 varchar(100))
as
exec('select '+@列名+' from 表名')
go

--调用:
exec 过程名 'aaa'

34,875

社区成员

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

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