尽管表中有很多记录,但 SQL Server 游标没有循环

Ash*_*ani 0 sql sql-server cursor

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

@count = 0
Run Code Online (Sandbox Code Playgroud)

代码:

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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

我认为在没有游标的情况下执行此操作要简单得多。这似乎相当于你想要做的:

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

是一个 db<>fiddle。