代码之家  ›  专栏  ›  技术社区  ›  Sukasa

通过存储过程中的不同列值从单个表中选择多个表

  •  0
  • Sukasa  · 技术社区  · 17 年前

    ------------------------------------
    MyID    |  MyOtherData
    ------------------------------------
     4         asdf
     4         test
     3         qwerty
     2         morestuff
    

    ------------------------------------
    MyID    |  MyOtherData
    ------------------------------------
     4         asdf
     4         test
    
    ------------------------------------
    MyID    |  MyOtherData
    ------------------------------------
     3         qwerty
    
    ------------------------------------
    MyID    |  MyOtherData
    ------------------------------------
     2         morestuff
    

    如果我不知道提前会有多少唯一的MyID值,那么如何解决这个问题是最好的方法?

    5 回复  |  直到 17 年前
        1
  •  2
  •   JohnFx    17 年前

    您最好的选择不是在Proc中执行此操作,而是在客户机代码中执行此操作。

    1. 编写一个返回 与MyTable不同的MYID)
    2. 在你的应用程序中,通过每个 它接受MyID值并返回
        2
  •  1
  •   Mitchel Sellers    17 年前

    选择不同的MyId 从MyTable

        3
  •  1
  •   AdaTheDev    17 年前

        4
  •  0
  •   Darth Continent    17 年前

    您可以创建一个循环结构,该结构通过主表ID的子集进行迭代,为每组表生成一个单独的结果集。这很难看,但希望这只是一些特别的事情,你想摆脱的方式,希望永远不要再处理。

    DECLARE @Entities TABLE
    (
         ID int IDENTITY (1, 1) PRIMARY KEY NOT NULL,
         MyID int,
         MyOtherData varchar(100)
    )
    
    INSERT INTO @Entities (MyID, MyOtherData)
    SELECT MyID, MyOtherData
    FROM TheMainTable
    ORDER BY MyID, MyOtherData
    
    DECLARE @Count int
    DECLARE @Max int
    
    SET @Count = 1
    SELECT @Max = COUNT(ID) FROM @Entities
    
    DECLARE @MyID_Current int
    
    WHILE (@Count <= @Max)
    BEGIN
    
         SELECT @MyID_Current = MyID
         FROM @Entities
         WHERE ID = @Count
    
         -- Output each individual result set.
         SELECT MyID, MyOtherData
         FROM @Entities
         WHERE MyID = @MyID_Current
    
         SET @Count = @Count + 1
    
    END
    

    对于更丑陋的东西,您可以在每次迭代时创建或选择数据库中一个新的、唯一命名的表,并将特定MyID的记录插入该表,而不只是大量生成单独的结果集。

        5
  •  0
  •   andy    13 年前
    DECLARE @Entities TABLE
    (
     ID int IDENTITY (1, 1) PRIMARY KEY NOT NULL,
     MyID int,
     MyOtherData varchar(100)
    )
    
    INSERT INTO @Entities (MyID, MyOtherData)
    SELECT MyID, MyOtherData
    FROM TheMainTable
    ORDER BY MyID, MyOtherData
    
    DECLARE @Count int
    DECLARE @Max int
    
    SET @Count = 1
    SELECT @Max = COUNT(ID) FROM @Entities
    
    DECLARE @MyID_Current int
    
    WHILE (@Count <= @Max)
    BEGIN
    
     SELECT @MyID_Current = MyID
     FROM @Entities
     WHERE ID = @Count
    
     -- Output each individual result set.
     SELECT MyID, MyOtherData
     FROM @Entities
     WHERE MyID = @MyID_Current
    
     SET @Count = @Count + 1
    
    END