T-SQL: Looping through an array of known values

后端 未结 7 1576
深忆病人
深忆病人 2021-01-30 00:51

Here\'s my scenario:

Let\'s say I have a stored procedure in which I need to call another stored procedure on a set of specific ids; is there a way to do this?

i

7条回答
  •  孤独总比滥情好
    2021-01-30 01:09

    What I do in this scenario is create a table variable to hold the Ids.

      Declare @Ids Table (id integer primary Key not null)
      Insert @Ids(id) values (4),(7),(12),(22),(19)
    

    -- (or call another table valued function to generate this table)

    Then loop based on the rows in this table

      Declare @Id Integer
      While exists (Select * From @Ids)
        Begin
          Select @Id = Min(id) from @Ids
          exec p_MyInnerProcedure @Id 
          Delete from @Ids Where id = @Id
        End
    

    or...

      Declare @Id Integer = 0 -- assuming all Ids are > 0
      While exists (Select * From @Ids
                    where id > @Id)
        Begin
          Select @Id = Min(id) 
          from @Ids Where id > @Id
          exec p_MyInnerProcedure @Id 
        End
    

    Either of above approaches is much faster than a cursor (declared against regular User Table(s)). Table-valued variables have a bad rep because when used improperly, (for very wide tables with large number of rows) they are not performant. But if you are using them only to hold a key value or a 4 byte integer, with a index (as in this case) they are extremely fast.

提交回复
热议问题