SQL 游标使用细节


SQL 游标使用细节

定义游标时用默认的申明时

1.如果用到了order by ,order by 里面没有主键的话,所在的修改不会更新映射到游标去。

2.没有order by 的时候则没事。

3.多表关联时,如果order by 没有用到主键。所在的修改不会更新映射到游标去。

IF OBJECT_ID('tempdb..##a') IS NOT NULL
    DROP TABLE ##a 

CREATE TABLE ##a(id INT IDENTITY(1,1) , mc VARCHAR(50))


INSERT INTO ##a(mc)
SELECT '1'
UNION ALL
SELECT '2'


DECLARE
    @b TABLE(mc int)
INSERT INTO @b
        ( mc )
SELECT '1'
UNION ALL
SELECT '2'

EXEC dbo.Create_CLUSTERED_IX @TableName = '##a', -- varchar(255)
    @FiledName = 'id', -- varchar(500)
    @IXName = 'ix_tmp_a_id' -- varchar(255)


  
DECLARE @id INT,@mc VARCHAR(50) 
DECLARE cursor_name   CURSOR  DYNAMIC FOR   
  SELECT a.id,a.mc
  FROM ##a a
  --WHERE a.id=b.mc
  ORDER BY mc

OPEN cursor_name

FETCH NEXT FROM cursor_name INTO @id,@mc
 While @@FETCH_STATUS<>-1
BEGIN

    SELECT @mc
     UPDATE ##a SET mc='33'
    FETCH NEXT FROM cursor_name INTO @id,@mc
END

CLOSE cursor_name
DEALLOCATE cursor_name


/* declare variables */
SQL