CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

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

楼主infinite()2003-09-04 17:57:27 在 MS-SQL Server / 基础类 提问

我写了一个表值函数,参数是一个int类型的参数,当我传递一个类型是int的  
  列的名称给函数作为参数时无法通过编译,但传递一个数字可以。  
   
  请问各位大虾,我该怎么办? 问题点数:100、回复次数:10Top

1 楼pengdali()回复于 2003-09-04 18:09:13 得分 20

create   proc   过程名   (@列名   varchar(100))  
  as  
  exec('select   '+@列名+'   from   表名')  
  go  
   
  --调用:  
  exec   过程名   'aaa'Top

2 楼pengdali()回复于 2003-09-04 18:26:22 得分 20

函数内不能用exec,你可以这样用过程:  
   
  create   table   #临时表   (结构和返回结构相同)  
   
  insert   #临时表   exec   你的过程   '参数'  
   
  select   *   from   #临时表Top

3 楼yujohny(踏网无痕)回复于 2003-09-04 19:17:28 得分 0

大力回答的真快!!  
   
  Top

4 楼txlicenhe(马可)回复于 2003-09-04 19:54:38 得分 0

大力根本就不给别人机会。Top

5 楼nboys()回复于 2003-09-04 20:10:24 得分 20

 
  create   function   f_name   (@id   int)  
  returns   int  
  as  
  return   @id  
  go  
   
   
  执行:  
  select   dbo.f_name(是int的字段)   from   tableNameTop

6 楼zjcxc(邹建)回复于 2003-09-04 20:24:25 得分 0

不太理解楼主的意思Top

7 楼infinite()回复于 2003-09-04 21:22:45 得分 0

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

8 楼zjcxc(邹建)回复于 2003-09-04 21:29:49 得分 20

返回表是没有问题的.你看我的例子函数,返回的就是一个表集.  
   
  --创建字符串分拆的函数  
  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  
  Top

9 楼zjcxc(邹建)回复于 2003-09-04 21:32:44 得分 20

如果要将函数结果做为查询语句中的一部分来使用,你就必须用访问表的方法来使用它.  
   
   
  比如,要利用上面的函数来查询:  
  select   *   from   表    
  where   treeid   in(select   *   from   dbo.fsplit('1,2,3,4',','))     --既然返回结果是表集,就要用表的方法去写.  
   
  而不能写成:  
  select   *   from   表   where   treeid   in   dbo.fsplit('1,2,3,4',',')     --这个写法就错了.  
   
   
  Top

10 楼infinite()回复于 2003-09-05 08:24:33 得分 0

哎,看来你们还是没有搞懂我到底要问什么,看看标题吧。  
  不过谢谢各位了。Top

相关问题

  • 传递函数做参数
  • 如何在函数参数中传递链表(STL)
  • 如何在函数参数中传递链表(STL)
  • 函数的参数传递数值!?
  • 函数的参数传递问题
  • perl 函数参数传递问题
  • 函数参数传递问题?
  • 回掉函数的参数的传递?
  • 函数参数传递问题
  • 关于函数参数传递问题?

关键词

  • 函数
  • 语句
  • 查询
  • sql
  • 参数
  • 表
  • spli
  • 传递
  • 字符串
  • fsplit

得分解答快速导航

  • 帖主:infinite
  • pengdali
  • pengdali
  • nboys
  • zjcxc
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo