【发布时间】:2020-05-18 22:13:46
【问题描述】:
我的存储过程中有游标。我已经更新到 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[
【问题讨论】:
-
如果可能,发布示例数据。
-
样本数据需要是文本,而不是图片。
-
@Zhorov 可以按照您的要求进行
-
@tripleee 哦,尝试使用 set 进行更新。
-
除了作为文本的示例数据之外,还可以考虑以 SQL 语法发布它,例如
create table ...和insert ...。这将接近于制作minimal reproducible example。 meta.stackoverflow.com/questions/333952/…
标签: sql sql-server optimization cursor set-operations