在很多场合,用临时表或表变量也可以替代游标昨时表用在表没有标识列(int)的情况下. 在表有标识列(int)的情况下可以用表变量,当然也可以用临时表.利用临时表或表变量的原因时,生成一个连续的列 对于临时表是使用 SELECT .... ,IDENTITY(int) NewID INTO #tmp SELECT ... FROM YourTable对于YourTable含有标识列(比如字段名为ID)时,可以 INSERT @tmpTable SELECT ..., NewID=(SELECT COUNT(*) FROM YourTable b WHERE b.id<=a.id) FROM YourTable a当然,也可以不写入表变量而使用子查询.当有了从 1--你的记录数连续的NewID时, 你就可以用循环来操作每一条记录了. 这个NewID你就可以当它是指针标识. DECLARE @i INT,@cnt INT SET @i=1 SELECT @cnt=COUNT(*) FROM YourTable WHILE @i<@cnt BEGIN SELECT .... FROM #tmp(或@tmpTable依上面情况不同) WHERE NewID=@i ... SET @i=@i+1 ENDDROP TABLE...
在表有标识列(int)的情况下可以用表变量,当然也可以用临时表.利用临时表或表变量的原因时,生成一个连续的列
对于临时表是使用
SELECT .... ,IDENTITY(int) NewID INTO #tmp SELECT ... FROM YourTable对于YourTable含有标识列(比如字段名为ID)时,可以
INSERT @tmpTable
SELECT ..., NewID=(SELECT COUNT(*) FROM YourTable b WHERE b.id<=a.id) FROM YourTable a当然,也可以不写入表变量而使用子查询.当有了从 1--你的记录数连续的NewID时, 你就可以用循环来操作每一条记录了.
这个NewID你就可以当它是指针标识.
DECLARE @i INT,@cnt INT
SET @i=1
SELECT @cnt=COUNT(*) FROM YourTable
WHILE @i<@cnt
BEGIN
SELECT .... FROM #tmp(或@tmpTable依上面情况不同) WHERE NewID=@i
...
SET @i=@i+1
ENDDROP TABLE...