我试图减少WHILE循环中的变量名编号,因此它以@chk3开始,然后是@chk2,依此类推。
这是我目前拥有的代码,但是我在@chk_current
上创建的“变量”被视为文本。
如何创建一个实际的变量,然后使用固定文本@chk
和@task_total number来减少变量?因此,在第一个循环中,变量名将为@chk3
(值= NO),第二个为@chk2
(值= YES),然后为@chk1
(值= YES),然后代码将退出循环。
DECLARE ALL...
SET @chk1 = 'YES'
SET @chk2 = 'YES'
SET @chk3 = 'NO'
SELECT @task_total = COUNT(*)
FROM R5TASKCHECKLISTS
WHERE TCH_TASK = @tasknum
WHILE @task_total >= 0
BEGIN
SET @chk_current = CONCAT('@chk', @task_total)
INSERT INTO R5TRACKINGDATA
(TKD_TRANS, TKD_TRACKDATE,
TKD_PROMPTDATA1, TKD_PROMPTDATA2, TKD_PROMPTDATA3,
TKD_PROMPTDATA4, TKD_PROMPTDATA5, TKD_PROMPTDATA6,
TKD_PROMPTDATA7, TKD_PROMPTDATA8, TKD_PROMPTDATA9,
TKD_PROMPTDATA10, TKD_PROMPTDATA11, TKD_PROMPTDATA12,
TKD_PROMPTDATA13, TKD_PROMPTDATA14, TKD_PROMPTDATA15)
VALUES ('AO01', --TKD_TRANS
GETDATE(),
@next_evtcode, -- EVT_CODE
@ot_desc, -- EVT_DESC
@ot_dates, -- EVT_DATE (dd/mm/yyyy)
'100', -- EVT_MRC
'282', -- EVT_ORG
'PMM', -- EVT_JOBTYPE
@ot_dates, -- EVT_REPORTED (dd/mm/yyyy)
@ot_object, -- EVT_OBJECT
'282', -- EVT_OBJECT_ORG
@ot_dates, -- EVT_TARGET (dd/mm/yyyy)
@ot_dates, -- EVT_COMPLETED (dd/mm/yyyy)
@ot_createdby, -- EVT_ENTEREDBY
@tasklist, -- TSK_CODE
@task_total, -- ACK_SEQUENCE
@chk_current -- ACK_NO_YES (NO or YES)
)
SET @task_total = @task_total - 1;
END
1条答案
按热度按时间xfb7svmp1#
将代码简化为MCVE
SQL不使用数组。它使用表。因此,要在循环中执行此操作:
如果变量(@chk*)的数量未知,我假设你是从数据中获取的,这里模拟了这个过程,使用了一条
INSERT
语句。因此,不考虑可能的SQL注入,您的php代码可能如下所示: