SQL 尽管 table 中有很多记录,但服务器游标没有循环

SQL Server cursor is not looping although there are lots of records in the table

虽然 SELECT id, also FROM names WHERE isnull(also,'')<>''1 返回了 2000 多个结果,但以下光标没有循环,我得到:

@count = 0

代码:

DECLARE @id BIGINT, @name NVARCHAR(1000)

DECLARE @aslo TABLE (id INT, name NVARCHAR(100))

DECLARE name_cur CURSOR FOR 
     (SELECT id, also 
      FROM names 
      WHERE ISNULL(also, '') <> '')

DECLARE @count INT = 0

OPEN name_cur

WHILE @@FETCH_STATUS = 0  
BEGIN  
   SET @count = @count + 1

   INSERT INTO @aslo (id, name)
       SELECT @id, * 
       FROM string_split(@name, ',')

   FETCH NEXT FROM name_cur INTO @id, @name;  
END  

CLOSE name_cur;  
DEALLOCATE name_cur;

SELECT @count
SELECT COUNT(*) FROM @aslo a

我认为不用游标来做这个要简单得多。这似乎等同于您想要执行的操作:

INSERT INTO @aslo (id, name)
    SELECT n.id, ss.value as name
    FROM names n CROSS APPLY
         string_split(n.name, ',') ss;

Here 是一个 db<>fiddle.