我不明白为什么数据会被覆盖。在第一个示例中,我使用了三个记录,例如我找到了三个员工。
在游标中,我在另外 2 个表中进行查询,检查课程是否位于包含已完成课程的表中和包含活动课程的表中,并将其写入变量。如果员工既没有完成也没有参加课程,PRINT 中的记录会出于某种原因消失吗?
create table personTest (
id bigint primary key ,
name varchar(MAX) not null,
);
insert into personTest values (1, 'Anna');
insert into personTest values (2, 'Andrey');
insert into personTest values (3, 'Kate');
create table activeCource (
id bigint primary key ,
name varchar(MAX) not null,
person_id bigint
);
insert into activeCource values (1, 'Cource ololo', 1);
insert into activeCource values (2, 'Cource trololo', 2);
create table passedCource (
id bigint primary key ,
name varchar(MAX) not null,
person_id bigint
);
insert into passedCource values (1, 'Cource ololo', 1);
insert into passedCource values (2, 'Cource trololo', 3);
DECLARE @current_person BIGINT
,@person_fullname VARCHAR(MAX)
,@course_result VARCHAR(20) = 'Данных нет'
DECLARE @cursor CURSOR
SET @cursor = CURSOR SCROLL FOR
SELECT
cls.id
,cls.name
FROM personTest AS cls
OPEN @cursor
FETCH NEXT FROM @cursor INTO @current_person, @person_fullname
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @course_result = (
SELECT
CASE
WHEN ISNULL(pls.id, 0) != 0 THEN 'Курс назначен'
ELSE 'Данных нет'
END AS is_exists
FROM activeCource AS pls
WHERE pls.person_id = @current_person
) --например у одного сотрудника (Kate) тут ни чего нет.
SELECT @course_result = (
SELECT
CASE
WHEN ISNULL(pls.id, 0) != 0 THEN 'Курс пройден'
ELSE 'Данных нет'
END AS is_exists
FROM passedCource AS pls
WHERE pls.person_id = @current_person
)
PRINT @person_fullname + ' ' + @course_result
-- Почему то принт выводит только двух сотрудников, а не трех. Понять не могу из за чего. Любой цикл в том же Swift выводит все.
FETCH NEXT FROM @cursor INTO @current_person, @person_fullname
END
CLOSE @cursor
DEALLOCATE @cursor