不需要functioncreate proc ss 
@j varchar(13) 
,@cd int 
,@time datetime 
as 
select 
a, 
b, 
c, 
d=isnull(@str+',','')+rtrim(dd.d)
from dd 
where 
a=@j and b=@cd and c=@time

解决方案 »

  1.   


    --在SQL2000中,合并字符串只能这样做,函数已经简化不了了。不过可以根据实际情况将返回的字符串大小改小点。
    --另外看了下楼主在存储过程中调用函数,还不如直接:
    create proc ss 
    @j varchar(13) 
    ,@cd int 
    ,@time datetime 
    as 
    declare @str varchar(8000) 
    select @str=isnull(@str+',','')+rtrim(d) from dd where a=@a and b=@b and c =@time
    select a, b, c, d=@str from dd--难道这样效果不是一样?干吗要舍简求繁?
      

  2.   

    楼主这个proc每次返回多少次数据来?
      

  3.   


    --不好意思,上面写错了一点
    create proc ss 
    @j varchar(13) 
    ,@cd int 
    ,@time datetime 
    as 
    declare @str varchar(8000) 
    select @str=isnull(@str+',','')+rtrim(d) from dd where a=@a and b=@b and c =@time
    select a=@j,b=@cd,c=@time,d=@str--这里改下
      

  4.   

    dd 的a,b,c 建复合索引试试
      

  5.   

    不知道你这两个表的数据量
    不知道你每次返回多少数据如果可能,可以加索引试试
    create index idx_01 on tempday(a,b,c)
    create index idx_02 on dd(a,b,c)
      

  6.   

    select 
    a, 
    b, 
    c, 
    d=fun_uniut(a,b,c)  a,b,c并不是传参数传进的  函数里的@a @b @c 就是a,b,c的值 不能写成你那个样子。上边我说错了 应该是按倍数增长的。
    数据量大约有4000条数据这样搜索的话 就等于做4000*4000次的查询,关键就是这里导致速度慢下来。我也想过建立索引但是我现在是没有权利给表加约束的。。只有那些常规查询 更新 删除单条记录 的操作的权利。。
    请大侠们再帮帮忙想想办法
    先谢谢了