了解 SQL Cusros 语法
Understanding SQL Cusros syntax
我正在查看以下 link 中 CURSOR
的示例:
http://blog.sqlauthority.com/2008/03/05/sql-server-simple-example-of-cursor-sample-cursor-part-2/
USE AdventureWorks
GO
DECLARE @ProductID INT
DECLARE @getProductID CURSOR
SET @getProductID = CURSOR FOR
SELECT ProductID
FROM Production.Product
OPEN @getProductID
FETCH NEXT FROM @getProductID INTO @ProductID
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ProductID
FETCH NEXT FROM @getProductID INTO @ProductID
END
CLOSE @getProductID
DEALLOCATE @getProductID
GO
这是一个非常简单的示例,但是我无法理解以下内容:
- 为什么定义中有两次
FETCH
?
- 我们看到它在打开光标时发生,然后在 while 循环内发生了完全相同的
FETCH
。
- 我们可以做些什么来使代码更简洁、更少冗余吗?
第一次提取是在开始循环之前填充变量。
第二次获取是为循环的下一次迭代填充这些变量。 @@FETCH_STATUS = 0 如果你的变量没有 运行 的话,循环的 0 部分会让你退出。
不幸的是,我认为您可以将其用于游标。
我正在查看以下 link 中 CURSOR
的示例:
http://blog.sqlauthority.com/2008/03/05/sql-server-simple-example-of-cursor-sample-cursor-part-2/
USE AdventureWorks
GO
DECLARE @ProductID INT
DECLARE @getProductID CURSOR
SET @getProductID = CURSOR FOR
SELECT ProductID
FROM Production.Product
OPEN @getProductID
FETCH NEXT FROM @getProductID INTO @ProductID
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ProductID
FETCH NEXT FROM @getProductID INTO @ProductID
END
CLOSE @getProductID
DEALLOCATE @getProductID
GO
这是一个非常简单的示例,但是我无法理解以下内容:
- 为什么定义中有两次
FETCH
? - 我们看到它在打开光标时发生,然后在 while 循环内发生了完全相同的
FETCH
。 - 我们可以做些什么来使代码更简洁、更少冗余吗?
第一次提取是在开始循环之前填充变量。
第二次获取是为循环的下一次迭代填充这些变量。 @@FETCH_STATUS = 0 如果你的变量没有 运行 的话,循环的 0 部分会让你退出。
不幸的是,我认为您可以将其用于游标。