由于SQL查询语句中不能直接使用存储过程,所以只能使用自定义函数来实现了。

实例如下:我有一个用户信息表,还有一个电话列表

要求:查询用户信息的时候,把电话列表拼接起来作为一个字段返回。

表内容.jpg

自定义一个函数,函数里使用了游标来进行循环获取电话号码,并接进完成,函数返回拼接好的电话列表。

(红色部分是返回值的长度,必须定义。之前我没有定义长度,始终只返回一个字符,相当悲剧。)

ALTER      FUNCTION GetDHLB(@user_id varchar(20))
RETURNS varchar(1000) AS 
BEGIN

 DECLARE   @phonenumberlist nvarchar(20)
 DECLARE   @phonenumber  nvarchar(20)
  declare @flag int

 DECLARE cursor_dhlb CURSOR FOR

  ( select tel from mytel where main_id = @user_id)

 open cursor_dhlb

 FETCH NEXT FROM cursor_dhlb INTO @phonenumber

 set @flag = 0

 WHILE (@@fetch_status = 0)
 BEGIN
  

  if @flag = 0
  begin
          SET @phonenumberlist  = @phonenumber
  end
  else
  begin
          SET @phonenumberlist  = @phonenumberlist +'/'+ @phonenumber
  end
     
  set @flag = @flag + 1


  FETCH NEXT FROM cursor_dhlb INTO @phonenumber
 END

 close cursor_dhlb
 Deallocate cursor_dhlb


 return @phonenumberlist

END

操作结果.jpg

最后修改:2011 年 09 月 07 日
卧槽,全是白嫖客,服务器不要钱吗?