在 while 循环中将非顺序值传递给存储过程.数组到存储过程



我正在将不按顺序排列的值传递给 while 循环中的存储过程。
如果数字是按顺序排列的,我知道该怎么做,但是我如何传递数组中的值,而不是按顺序传递?

这工作正常,因为我的数字都是从 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 循环吗?

如果你把你的值存储在某个表中,你可以这样做:

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;

您也可以使用光标来做这样的事情

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;

最新更新