DECLARE @e NVARCHAR(MAX)
CREATE TABLE #a(moblies int)
SET @e=''
SELECT @e=@e+dbo.DP_Mobiles.UserName+','
FROM #a,dbo.DP_Mobiles
WHERE #a.moblies=dbo.DP_Mobiles.MobileId
IF LEN(@e)=1
   SET @e=':无'
ELSE
   SET @e=SUBSTRING(@e,1,LEN(@e)-1)
PRINT @eDROP TABLE #a
代码是这样的,我想试试当#a是空的时候,是不是输出':无'这个东东啊?但弹出提示消息 537,级别 16,状态 5,第 10 行
传递给 LEFT 或 SUBSTRING 函数的长度参数无效。还有几个小问题:LEN(@e)=1语句中,如果#a为空,那@e赋值就是‘,’,逗号算不算一个字符啊?SUBSTRING的具体用法
而且这段语句我理解的有点模糊,大神们能跟我说说么?sqllenSUBSTRING

解决方案 »

  1.   

    IF LEN(@e)=1
    =>
    IF LEN(@e)<1
      

  2.   

    一楼能问问为什么吗?IF LEN(@e)=1
    =>
    IF LEN(@e)<1
      

  3.   

    你点引用就行了。。不用截图
    意思是select查询不到数据,@e没有进行赋值操作,你上一步执行了set @e=''
    所以len(@e)=0 ,这样进入了你的else判断
    @e=SUBSTRING(@e,1,LEN(@e)-1),substring函数当你给定的长度LEN(@e)-1=-1这样就报错了
      

  4.   

    谢谢提醒,我刚用不久,很多还很生疏,还望不啬请教,嗯,那逻辑我基本上弄明白了,还有个小问题,这个用法我是截取出来的,它原本的用途是用来做类似这样的输出的“姓名,姓名,姓名····”这样的,叫xml输出吧,就是当@a不是空的时候,这个输出的SELECT @e=@e+dbo.DP_Mobiles.UserName+','和@e=SUBSTRING(@e,1,LEN(@e)-1)我不懂,还望指教,谢谢
      

  5.   

    假设查询得到的结果是a,b,c三行数据,那么赋值得到的结果就是a,b,c,
    因为后面拼接了个逗号嘛,然后下面的substring就将最后一个逗号截断
    最终输出的结果就是a,b,c了