我的存储过程中有游标。我已经更新到 while 循环以更快地执行。但是我的 while 循环需要同样长的时间。请帮我调试我的脚本。请找到我的以下代码。
我需要帮助更新 Cursor 以在 MS SQL 中设置基于运算符的查询。
DECLARE @orderArray INT
,@LeftTSMKEY NVARCHAR(250)
,@ListElid NVARCHAR(250)
,@ListType NVARCHAR(250)
,@ListType_Prev NVARCHAR(250)
SET @ListType_Prev = ''
SET @inc = 0
DECLARE cursql CURSOR
FOR
SELECT ListElid
,ListType
,orderArray
,LeftTSMKEY
FROM QAT_ListElid
ORDER BY ListType
,orderArray
OPEN cursql
FETCH NEXT
FROM cursql
INTO @ListElid
,@ListType
,@orderArray
,@LeftTSMKEY
WHILE (@@Fetch_status = 0)
BEGIN
IF @ListType <> @ListType_Prev
BEGIN
SET @inc = 0
SET @ListType_Prev = @ListType
END
ELSE IF @ListType = @ListType_Prev
BEGIN
SET @inc = @inc + 1
END
IF @inc <> @orderArray
BEGIN
INSERT [QAT_ListElid2] (
[ListElid]
,[ListType]
,[orderArray]
,[LeftTSMKEY]
)
VALUES (
@ListElid
,@ListType
,@inc
,@LeftTSMKEY + CAST(@inc AS NVARCHAR(10)) + ']'
)
END
FETCH NEXT
FROM cursql
INTO @ListElid
,@ListType
,@orderArray
,@LeftTSMKEY
END
CLOSE cursql
DEALLOCATE cursql
请在下面找到示例数据
ListElid ListType orderArray LeftTSMKEY
1000:odl5:7pt_ToxAcuDo[0] 1000:odl5:7pt_ToxAcuDo 0 ToxAcuDo[
106i:odl5:7pt_ToxAcuDo[0] 106i:odl5:7pt_ToxAcuDo 0 ToxAcuDo[
107:107:7pt_NIL[0] 107:107:7pt_NIL 0 NIL[
107:1827:7pt_NIL[0] 107:1827:7pt_NIL 0 NIL[
107:1827:7pt_NIL[1] 107:1827:7pt_NIL 1 NIL[
107:1827:7pt_NIL[3] 107:1827:7pt_NIL 3 NIL[
107:1hqn:7pt_NIL[0] 107:1hqn:7pt_NIL 0 NIL[
107:1hqn:7pt_NIL[1] 107:1hqn:7pt_NIL 1 NIL[
107:1rj7:7pt_NIL[0] 107:1rj7:7pt_NIL 0 NIL[
107:1rj7:7pt_NIL[1] 107:1rj7:7pt_NIL 1 NIL[
107:1rsg:7pt_NIL[0] 107:1rsg:7pt_NIL 0 NIL[
107:1s2r:7pt_NIL[0] 107:1s2r:7pt_NIL 0 NIL[
107:1s2r:7pt_NIL[1] 107:1s2r:7pt_NIL 1 NIL[
107:1s2r:7pt_NIL[2] 107:1s2r:7pt_NIL 2 NIL[
107:1s2r:7pt_NIL[4] 107:1s2r:7pt_NIL 4 NIL[
107:1vf:7pt_ NIL[0] 107:1vf:7pt_NIL 0 NIL[