各位大侠能帮我解释下这个字符串合并的函数吗?我对自定义函数的用法还不熟悉~~~麻烦大家了详细解释下了~感激不尽~~CREATE FUNCTION dbo.f_str(@id int) 
RETURNS varchar(8000) 
AS 
BEGIN 
    DECLARE @r varchar(8000) 
    SET @r = '' 
    SELECT @r = @r + ',' + value FROM tb WHERE id=@id 
    RETURN STUFF(@r, 1, 1, '')            
                                                                 
   END 

解决方案 »

  1.   


    楼主最好print一下@r,练习实际数据
    CREATE FUNCTION dbo.f_str(@id int) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @r varchar(8000) 
    --将变量@r赋值为''
        SET @r = '' 
    --将所有value以 ',' + value的形式拼成字符串赋给@r
        SELECT @r = @r + ',' + value FROM tb WHERE id=@id 
    --将字符串@r第一个字符','以''来代替
        RETURN STUFF(@r, 1, 1, '')                                                                            
      END 
      

  2.   

     RETURN STUFF(@r, 1, 1, '')  stuff函数。。
         
      

  3.   

    DECLARE @r varchar(8000) 
        --将变量@r赋值为''
        SET @r = '' 
        --将所有value以 ',' + value的形式拼成字符串赋给@r
        SELECT @r = @r + ',' + value FROM tb WHERE id=@id 
        --将字符串@r第一个字符','以''来代替
        RETURN STUFF(@r, 1, 1, ''--这个语句连接后的字符串前面有个',',stuff的作用就是从第一个字符开始,总共一个字符,替换为空,也就是去掉第一个字符
      

  4.   

    STUFF
    --刪除指定的字元長度並於指定的開始點插入另一字元集。
    --語法
    --STUFF ( character_expression , start , length , character_expression ) 
    --範例
    --本範例傳回藉由從第一個字串 (abcdef) 位置 2開始 (於 b) 刪除三個字元,並於刪除點插入第二個字串所建立的字元字串。 
    SELECT STUFF('abcdef', 2, 3, 'ijklmn')
    GO
    --以下為結果集:
    --------- 
    aijklmnef (1 row(s) affected)