@@FETCH_STATUS <>-1 AND @@FETCH_STATUS <>-2 是什么意思?
What does @@FETCH_STATUS <>-1 AND @@FETCH_STATUS <>-2 mean?
我遇到一道试题,里面有如下代码:
ALTER FUNCTION fncF2 (@HWStreamIndex int = 0)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @OnSiteGroups AS nvarchar(150)
DECLARE @OnSiteGroupDetails AS nvarchar(1000)
DECLARE @HWOnSiteGroupIndex AS int
DECLARE @OnSiteGroupsTotal AS nvarchar(max)
SET @OnSiteGroupsTotal = ''
DECLARE cursor1 CURSOR
READ_ONLY FOR
SELECT
HWOnSiteGroupName + '-' AS OnSiteGroups,
HWOnSiteGroupIndex
FROM
HW_STREAM_ONSITE_GROUP
WHERE
HWStreamIndex = @HWStreamIndex
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @OnSiteGroups, @HWOnSiteGroupIndex
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
BEGIN
SET @OnSiteGroupsTotal = @OnSiteGroupsTotal + @OnSiteGroups + ' -- '
DECLARE cursor2 CURSOR
READ_ONLY FOR
SELECT
ISNULL(HW_MANAGE_METH_CODES.HWMMCode, '') + '_' +
CONVERT(nvarchar(20), CONVERT(decimal(12, 2),
ISNULL(HW_STREAM_ONSITE_GROUP_DETAILS.PercentProcessed, 0.0) * 100)) + '%' AS OnSiteGroups
FROM
HW_STREAM_ONSITE_GROUP_DETAILS
JOIN HW_STREAM_ONSITE_GROUP
ON HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex = HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex
LEFT JOIN HW_MANAGE_METH_CODES
ON HW_STREAM_ONSITE_GROUP_DETAILS.HWMMCodeIndex = HW_MANAGE_METH_CODES.HWMMCodeIndex
WHERE
HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex = @HWOnSiteGroupIndex
OPEN cursor2
FETCH NEXT FROM cursor2 INTO @OnSiteGroupDetails
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
BEGIN
SET @OnSiteGroupsTotal = @OnSiteGroupsTotal + @OnSiteGroupDetails + ', '
END
END
FETCH NEXT FROM cursor2 INTO @OnSiteGroupDetails
END
CLOSE cursor2
DEALLOCATE cursor2
END
END
FETCH NEXT FROM cursor1 INTO @OnSiteGroups, @HWOnSiteGroupIndex
END
CLOSE cursor1
DEALLOCATE cursor1
RETURN @OnSiteGroupsTotal
END
通常我在使用游标时使用@@FETCH_STATUS = 0
。我试图了解这段代码的工作原理,以及 @@FETCH_STATUS <> -1
和 @@FETCH_STATUS <> -2
如何影响整体执行,但我无法理解这段代码。
谁能解释一下语句 @@FETCH_STATUS <> -1
和 @@FETCH_STATUS <> -2
的目的是什么以及这个函数的执行步骤是什么?
如 Microsoft Documentation 中所述,有 4 个可能的 @@FETCH_STATUS
值,每个代表不同的状态消息:
0
- FETCH
语句成功。
-1
- FETCH
语句失败或该行超出结果集。
-2
- 提取的行丢失。
-9
- 光标未执行提取操作。
WHILE (@@fetch_status <> -1)
告诉循环 运行 只要
最后一个游标 FETCH
语句成功并且该行在结果集中。
IF (@@fetch_status <> -2)
正在检查以确保在继续该过程之前该行存在。
我遇到一道试题,里面有如下代码:
ALTER FUNCTION fncF2 (@HWStreamIndex int = 0)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @OnSiteGroups AS nvarchar(150)
DECLARE @OnSiteGroupDetails AS nvarchar(1000)
DECLARE @HWOnSiteGroupIndex AS int
DECLARE @OnSiteGroupsTotal AS nvarchar(max)
SET @OnSiteGroupsTotal = ''
DECLARE cursor1 CURSOR
READ_ONLY FOR
SELECT
HWOnSiteGroupName + '-' AS OnSiteGroups,
HWOnSiteGroupIndex
FROM
HW_STREAM_ONSITE_GROUP
WHERE
HWStreamIndex = @HWStreamIndex
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @OnSiteGroups, @HWOnSiteGroupIndex
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
BEGIN
SET @OnSiteGroupsTotal = @OnSiteGroupsTotal + @OnSiteGroups + ' -- '
DECLARE cursor2 CURSOR
READ_ONLY FOR
SELECT
ISNULL(HW_MANAGE_METH_CODES.HWMMCode, '') + '_' +
CONVERT(nvarchar(20), CONVERT(decimal(12, 2),
ISNULL(HW_STREAM_ONSITE_GROUP_DETAILS.PercentProcessed, 0.0) * 100)) + '%' AS OnSiteGroups
FROM
HW_STREAM_ONSITE_GROUP_DETAILS
JOIN HW_STREAM_ONSITE_GROUP
ON HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex = HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex
LEFT JOIN HW_MANAGE_METH_CODES
ON HW_STREAM_ONSITE_GROUP_DETAILS.HWMMCodeIndex = HW_MANAGE_METH_CODES.HWMMCodeIndex
WHERE
HW_STREAM_ONSITE_GROUP_DETAILS.HWOnSiteGroupIndex = @HWOnSiteGroupIndex
OPEN cursor2
FETCH NEXT FROM cursor2 INTO @OnSiteGroupDetails
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
BEGIN
SET @OnSiteGroupsTotal = @OnSiteGroupsTotal + @OnSiteGroupDetails + ', '
END
END
FETCH NEXT FROM cursor2 INTO @OnSiteGroupDetails
END
CLOSE cursor2
DEALLOCATE cursor2
END
END
FETCH NEXT FROM cursor1 INTO @OnSiteGroups, @HWOnSiteGroupIndex
END
CLOSE cursor1
DEALLOCATE cursor1
RETURN @OnSiteGroupsTotal
END
通常我在使用游标时使用@@FETCH_STATUS = 0
。我试图了解这段代码的工作原理,以及 @@FETCH_STATUS <> -1
和 @@FETCH_STATUS <> -2
如何影响整体执行,但我无法理解这段代码。
谁能解释一下语句 @@FETCH_STATUS <> -1
和 @@FETCH_STATUS <> -2
的目的是什么以及这个函数的执行步骤是什么?
如 Microsoft Documentation 中所述,有 4 个可能的 @@FETCH_STATUS
值,每个代表不同的状态消息:
0
-FETCH
语句成功。-1
-FETCH
语句失败或该行超出结果集。-2
- 提取的行丢失。-9
- 光标未执行提取操作。
WHILE (@@fetch_status <> -1)
告诉循环 运行 只要
最后一个游标 FETCH
语句成功并且该行在结果集中。
IF (@@fetch_status <> -2)
正在检查以确保在继续该过程之前该行存在。