代码之家  ›  专栏  ›  技术社区  ›  Ashkan Mobayen Khiabani

虽然表中有很多记录,但Sql服务器游标没有循环

  •  0
  • Ashkan Mobayen Khiabani  · 技术社区  · 5 年前

    尽管 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
    
    1 回复  |  直到 5 年前
        1
  •  5
  •   Gordon Linoff    5 年前

    我认为不用光标做这件事要简单得多。这似乎相当于你想做的:

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

    Here