mir*_*lav 2 sql-server cursor sql-server-2008-r2
我想知道当值发生变化时,带参数查询的游标@variable是否可以重新使用(CLOSE+ ) 。在我看来,它总是需要+ + +才能使新值生效。也许没什么大不了的,但我想知道在使用之间是否可以省略+ 。OPEN@variableCLOSEDEALLOCATEDECLAREOPEN@variableDEALLOCATEDECLARE
这里有完整的简单示例供您尝试:
DECLARE @ta TABLE (a int);
INSERT INTO @ta (a) VALUES (1),(2),(4),(8),(16),(32),(64);
---------
DECLARE @current_a int;
DECLARE @threshold int = 12;
DECLARE crs1 CURSOR FOR SELECT a FROM @ta WHERE a < @threshold;
--- first cursor use
OPEN crs1;
FETCH NEXT FROM crs1 INTO @current_a;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @threshold, @current_a
FETCH NEXT FROM crs1 INTO @current_a;
END;
CLOSE crs1;
DEALLOCATE crs1; -- can this be left out?
SET @threshold = 3;
DECLARE crs1 CURSOR FOR SELECT a FROM @ta WHERE a < @threshold; -- can this be left out?
--- second cursor use
OPEN crs1;
FETCH NEXT FROM crs1 INTO @current_a;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @threshold, @current_a
FETCH NEXT FROM crs1 INTO @current_a;
END;
CLOSE crs1;
DEALLOCATE crs1;
Run Code Online (Sandbox Code Playgroud)
这是线性化的示例,但当外部游标更改内部游标的查询参数时,问题也适用于嵌套游标。
一种方法是使用cursor variable:
Run Code Online (Sandbox Code Playgroud)DECLARE { { @local_variable [AS] data_type | [ = value ] } | { @cursor_variable_name CURSOR }@光标变量名称
是游标变量的名称。游标变量名称必须以 at (@) 符号开头并符合标识符规则。
光标
指定该变量是本地游标变量。
游标变量:
可以是游标类型或另一个游标变量的目标。有关详细信息,请参阅 SET @local_variable。
如果当前没有为游标变量分配游标,则可以在 EXECUTE 语句中将其作为输出游标参数的目标进行引用。
应该算是一个指向光标的指针。
DECLARE crs1 CURSOR FOR SELECT a FROM @ta WHERE a < @threshold;
-- could be changed to
DECLARE @crs1 CURSOR;
SET @crs1 = CURSOR FOR SELECT a FROM @ta WHERE a < @threshold;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |