update @RTable  set id2=emp.id from emp where emp.id2=RTable.id2
这是出自我写的sqlserver2005表值函数中的一行,其中@RTable声明了,程序前部也用了它没毛病。可是为什么上行update不行?
出错信息我没记,我想一定是很菜的初级问题!用不着记。

解决方案 »

  1.   

    不明白,贴全点吧
    update @RTable  set id2=emp.id from emp where emp.id2=RTable.id2
      

  2.   

    有表,列变量的要用exec语句吧exec ('update ' + @RTable + ' set id2=emp.id from emp where emp.id2=RTable.id2')
     
      

  3.   

    你的说法不对!我的同一个过程中有行insert后面直接跟的就是@RTable,执行很正常!
      

  4.   

    看来好像单凭这句看不出毛病了,下面我帖出所有,我把出毛病的部分标红。
    另说明,在注释掉红色的两行后,一切正常!
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    ALTER FUNCTION [dbo].[subb] ( )
    RETURNS @RTable TABLE
       (
        id1 int,
    id2 int
       )
    AS
    BEGIN
    declare @i int,@j int,@x int,@b int,@e int
    set @e=(select max(id2) from emp)
    set @b=1
    while (@b<=@e)
    begin
    set @i=0
    WHILE (@b*power(2,@i)<=@e)
    BEGIN
    set @x=@b*power(2,@i)
    set @j=1
    while @j<=power(2,@i)
    begin
    if @x<>@b INSERT @RTable (id1,id2) values (@b,@x)
    set @x=@x+1
    IF @x>@e break
    set @j=@j+1
    end
    set @i=@i+1
    END
    set @b=@b+1
    end
    update @RTable  set id1=emp.id from emp where emp.id2=RTable.id1
    update @RTable  set id2=emp.id from emp where emp.id2=RTable.id2

    RETURN
    END
      

  5.   

    晕!CSDN又把我的缩进全吃掉了,请大家对付看吧!
      

  6.   

    用 update @RTable  set id1=(select emp.id from emp where emp.id2=RTable.id1 )试下
      

  7.   

    update @RTable  set id2=emp.id 
    from @RTable  a  inner join emp 
    where emp.id2=a.id2 
    用表变量更新时,须要别名,不能直接引用RTable.id1
      

  8.   

    用别名就可以了:update @RTable  set id1=b.id from @RTable a join emp b on b.id2=a.id1 
    update @RTable  set id2=b.id from @RTable a join emp b on b.id2=a.id2