首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL - While代码中的While

TSQL - While代码中的While
EN

Stack Overflow用户
提问于 2010-12-15 09:19:27
回答 2查看 362关注 0票数 1

有没有人能告诉我为什么这不管用。我想在一个循环内循环.....

代码语言:javascript
复制
BEGIN
SET NOCOUNT ON;

Declare @TempLocations Table (PK int Identity(1,1) not null Primary key, LocationID Int)
Declare @TempItems Table (PK1 int Identity(1,1) not null Primary key, ItemID int)

Declare @TempTable Table (ID Int Identity(1,1), LocationID int, ItemID int)

Declare @MaxLocationID int,
  @MaxItemID Int,
  @LocationID int,
  @ItemID int

-- Load "Can be sold from" Locations into Temp Table  
  Insert Into @TempLocations (LocationID)
  Select LocationID from WMS.Locations
  Where CanBeSoldFrom = 'Checked'

  Set @MaxItemID = (Select MAX(PK1) From @TempItems)
  Set @LocationID = 1

-- Load "IsActive" Items into Temp Table
  Insert Into @TempItems (ItemID)
  Select ItemID from IMS.ItemDetails
  Where IsActive = 'Checked'

  Set @MaxLocationID = (Select MAX(PK) From @TempLocations)
  Set @ItemID = 1

--Main Code
  While @LocationID <= @MaxLocationID
   Begin

      While @ItemID <= @MaxItemID
      Begin
      Insert into @TempTable (LocationID, ItemID)
      Values (@LocationID, @ItemID)

      Set @ItemID = @ItemID + 1
      end

   Set @LocationID = @LocationID + 1
  End

Select * from @TempTable
END

我尝试得到的结果是这样的

@tempTable =

LocationID =1 ItemID =1 ItemID =2 ItemID =3 ItemID =4

LocationID =2 ItemID =1 ItemID =2 ItemID =3 ItemID =4

以此类推......

EN

回答 2

Stack Overflow用户

发布于 2010-12-15 13:05:55

这根本不应该在过程代码中完成。使用纯SQL,让DB引擎来做它的工作,它会执行得更好,更少的代码=更少的错误。我不确定我是否完全理解您想要的结果,但我认为这就够了:

代码语言:javascript
复制
select 
    LocationID,
    ItemID 
from
(
    Select LocationID from WMS.Locations
    Where CanBeSoldFrom = 'Checked'
)
cross join
(
    Select ItemID from IMS.ItemDetails
    Where IsActive = 'Checked'
)
order by
    LocationID,
    ItemID

票数 1
EN

Stack Overflow用户

发布于 2010-12-15 15:31:23

您的查询在@TempItems中填充任何内容之前选择@MaxItemID。因此,@MaxItemID为null。您必须切换语句Set @MaxLocationID = (Select MAX(PK) From @TempLocations)Set @MaxItemID = (Select MAX(PK1) From @TempItems)

我同意Jeremy的观点,但是使用基于集合的编程会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4445899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档