小编典典

SQL Server 2000-打破循环

sql

我不太擅长SQLServer2000。我有一个用逗号分隔的ID列表。我需要查看该ID是否存在于表中。如果是这样,我想打破这个循环,将ID保存在一个可以在存储过程中使用的变量中。这就是我现在正在尝试的方法:

DECLARE @coreID INT
SET @coreID=NULL

DECLARE @itemID NVARCHAR(50)
DECLARE itemCursor CURSOR LOCAL FAST_FORWARD FOR
  SELECT [String] AS 'itemID' FROM dbo.SplitListIntoTable(@myIDs)

OPEN itemCursor
FETCH NEXT FROM itemCursor INTO @itemID
  WHILE @@FETCH_STATUS = 0 BEGIN

  -- If @itemID EXISTS IN MyTable set @coreID=@itemID and Break. How do I do this?

  FETCH NEXT FROM itemCursor INTO @itemID
END

CLOSE itemCursor
DEALLOCATE itemCursor

谢谢!


阅读 196

收藏
2021-04-28

共1个答案

小编典典

理想情况下,您不应该使用游标,因为性能不会很高。如果您可以将其作为基于集合的语句来执行,请改为这样做,也许是这样的:

SELECT TOP 1 @CoreID = [String] 
FROM dbo.SplitListIntoTable(@myIDs) x
    JOIN MyTable t ON x.[String] = t.ID

但是,如果确实有理由使用游标,则可以使用BREAK语句中断WHILE循环

例如

WHILE @@FETCH_STATUS = 0 
    BEGIN
        IF EXISTS(SELECT * FROM MyTable WHERE Id = @ItemID)
            BEGIN
                SET @CoreId = @ItemId
                BREAK
            END

        FETCH NEXT FROM itemCursor INTO @itemID
    END
2021-04-28