SELECT TOP 1 @TempID1 = [clubId] FROM [dbo].[scbm_Clubs] 
WHERE [clubLv]=@ClubLv AND [leagueMatchesWin]<10 AND [isCpu]=0 AND [isArrangeFixture] = 0 AND [hostVisitingLs]=0 ORDER BY newid();UPDATE [dbo].[scbm_Clubs]
SET [isArrangeFixture] = 1
WHERE [clubId] = @tepID1 OR [clubId] = @tempID2;以上是循环语句为什么对[isArrangeFixture]置位后仍然可以选出 @TempID1??
郁闷 希望大家帮忙 看看什么问题? 在线等

解决方案 »

  1.   

    SELECT TOP 1表示每次只选出一个, 既然是循环的, 那说明你有很多的满足条件的@TempID1
      

  2.   

    对了, 又仔细看了看, 那两句的WHERE不同呀, 就是说SELECT的一回事, UPDATE的是另一回事 :)
      

  3.   

    写法不对,无法循环1 使用游标
    2 把clubId相加,在分别查分,作为条件
      

  4.   

    不是阿一样的 SELECT 出来了@TempID1 修改@TempID1 的属性 我再看看 好像是有点问题 太粗心了 
      

  5.   

    你update的条件跟Select不是一样的啊,@tepID1 和@tempID2是从哪来的?
      

  6.   

    DECLARE @TempID1 int;
    DECLARE @TempID2 int;

    WHILE (EXISTS(SELECT COUNT(*) FROM [dbo].[scbm_Clubs] WHERE [clubLv]=@ClubLv AND [leagueMatchesWin]<10 AND [isCpu]=0 AND [isArrangeFixture] = 0))
    BEGIN SELECT TOP 1 @TempID1 = [clubId] FROM [dbo].[scbm_Clubs] 
    WHERE [clubLv]=@ClubLv AND [leagueMatchesWin]<10 AND [isCpu]=0 AND [isArrangeFixture] = 0 AND [hostVisitingLs]=0 ORDER BY newid();SELECT TOP 1 @TempID2 = [clubId] FROM [dbo].[scbm_Clubs] 
    WHERE [clubLv]=@ClubLv AND [leagueMatchesWin]<10 AND [isCpu]=0 AND [isArrangeFixture] = 0 AND [clubId]<> @TempID1 AND [hostVisitingLs]=1 ORDER BY newid();
    ......
    UPDATE [dbo].[scbm_Clubs]
    SET [isArrangeFixture] = 1
    WHERE [clubId] = @TempID1 OR [clubId] = @TempID12;
    END修改成这样还是会出错 每次@TempID2有变化 在循环几次后表里还有符合条件的数据不@TempID1不在没有变化了
      

  7.   

    按照你7楼的意思,
    貌似不需要循环就可以解决吧,declare @ClubLv nvarchar(20)
    set @ClubLv ='xxxx'
    UPDATE [dbo].[scbm_Clubs] 
    SET [isArrangeFixture] = 1 
    WHERE  [clubLv]=@ClubLv AND [leagueMatchesWin] <10 AND [isCpu]=0 AND [isArrangeFixture] = 0 AND 
    ( [hostVisitingLs]=0 or [hostVisitingLs]=1 )
    go为啥要非要用循环啦?
      

  8.   

    可能问题出在你第二句的条件上。
    第二句改一下试试:SELECT TOP 1 @TempID2 = [clubId] FROM [dbo].[scbm_Clubs] 
    WHERE [clubLv]=@ClubLv AND [leagueMatchesWin] <10 AND [isCpu]=0 AND [isArrangeFixture] = 0 AND [clubId] <> isnull(@TempID1,0) AND [hostVisitingLs]=1 ORDER BY newid();