Передача непоследовательных значений хранимой процедуре в цикле while.Массив хранимой процедуры - PullRequest
0 голосов
/ 07 апреля 2019

Я передаю значения, которые НЕ в последовательности, хранимой процедуре в цикле while.
Я знаю, как это сделать, если число ARE в последовательности, но как передать значения, которые находятся в массиве, НЕв последовательности?

Это прекрасно работает, потому что все мои числа в последовательности от 4000 до 5000 (4000, 4001, 4002 ....)

DECLARE @FldID INT
SET @FldID = 4000

WHILE @FldID <= 5000
BEGIN
  PRINT @FldID;
  EXEC [dbo].[usp_delFld] @FldID
  SET @FldID = @FldID + 1;
END;

Но что, если мои номера нев последовательности, например: 4001, 4002, 4010, 4502, 4999, 4030, 4044)?

Как передать эти значения хранимой процедуре?Могу ли я использовать цикл while?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019
DECLARE @FldID INT DECLARE @COUNT INT,
@SNO INT DECLARE @TBL TABLE (SNO INT IDENTITY(1, 1), FLDID INT)
INSERT INTO
  @TBL (FLDID)
SELECT
  FLDID
FROM
  TABLE
WHERE
  FLDID BETWEEN 4000
  AND 5000
SELECT
  @COUNT = COUNT(*)
FROM
  @TBL 
SET @SNO=1
WHILE (@COUNT > 0) BEGIN
SELECT
  TOP (1) @FldID = FLDID,
  @SNO = SNO
FROM
  @TBL
WHERE
  SNO = @SNO PRINT @FldID;EXEC [dbo].[usp_delFld] @FldID
SET
  @COUNT = @COUNT -1
SET
  @SNO = @SNO + 1 END;
0 голосов
/ 08 апреля 2019

если вы сохранили свои значения в некоторой таблице, вы можете сделать это:

DECLARE @FldID INT
SET @FldID = 4000

WHILE @FldID <= 5000
BEGIN
  if exists(select 1 from SomeTable Where FldID=@FldID)
  begin
      PRINT @FldID;
      EXEC [dbo].[usp_delFld] @FldID
      SET @FldID = @FldID + 1
  end
END;

также вы можете использовать курсор для таких вещей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...