私はそれに次のコードを持っていた検査の質問、出くわした:カーソルを使用している間、私は@@FETCH_STATUS = 0
を使用する通常@@ FETCH_STATUS <> - 1 AND @@ 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 <> -1
と@@FETCH_STATUS <> -2
が全体の実行にどのように影響するのですか?このコードを把握することはできませんでした。
文@@FETCH_STATUS <> -1
と@@FETCH_STATUS <> -2
の目的は何ですか?また、この機能の実行手順は何ですか?
[@@ FETCH_STATUS](https://docs.microsoft.com/en-us/sql/t-sql/functions/fetch-status-transact-sql) – Lamak
ドキュメントには、異なる値。 https://docs.microsoft.com/en-us/sql/t-sql/functions/fetch-status-transact-sqlこの機能を無効にすることをお勧めします。ループが必要ないネストされたカーソルを使用しています。 FOR XMLを使用すると、コンマで区切られたリストをより簡単かつ迅速に生成できます。 –
サンプルコードは本当に役に立ちます:) –