由于SQL查询语句中不能直接使用存储过程,所以只能使用自定义函数来实现了。
实例如下:我有一个用户信息表,还有一个电话列表
要求:查询用户信息的时候,把电话列表拼接起来作为一个字段返回。
自定义一个函数,函数里使用了游标来进行循环获取电话号码,并接进完成,函数返回拼接好的电话列表。
(红色部分是返回值的长度,必须定义。之前我没有定义长度,始终只返回一个字符,相当悲剧。)
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