我不太擅长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
谢谢!
理想情况下,您不应该使用游标,因为性能不会很高。如果您可以将其作为基于集合的语句来执行,请改为这样做,也许是这样的:
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