我创建了这个触发器,并选择:
SELECT @registro=seccion
FROM dbo.horarios
WHERE materia=@materia
AND seccion=@seccionselect
无效。 This link表示:如果未从select返回值,则将保留先前的赋值。但是没有发现符合此条件的记录正在返回新数据。底部是输出和数据库值。
CREATE TRIGGER tgr_insertOnHorarios on horarios
AFTER INSERT
AS
BEGIN
DECLARE @materia varchar(7),@aula int,@profesor varchar(7), @seccion varchar(2),@dia varchar(10),
@hora_desde time, @hora_hasta time, @cantidad int, @errores varchar(300), @displayError bit,@registro nchar(10)
SELECT @materia= i.materia FROM inserted i;
SELECT @profesor=i.profesor FROM inserted i;
SELECT @seccion=i.seccion FROM inserted i;
SELECT @dia= i.dia FROM inserted i;
SELECT @hora_desde=i.hora_desde FROM inserted i;
SELECT @hora_hasta= i.hora_hasta FROM inserted i;
SELECT @cantidad= i.cantidad FROM inserted i;
SELECT @aula = i.aula FROM inserted i;
IF (SELECT cantidad_alumnos FROM aulas WHERE codigo=@aula)<@cantidad
BEGIN
SET @errores= 'Contiene mas estudiantes de los permitidos en el aula,'
PRINT @errores
--RAISERROR (@errores,16,1);
ROLLBACK TRANSACTION;
RETURN
END
print @seccion
print @materia
***set @registro='empty'***
print 'registro '+ @registro
**SELECT @registro=seccion FROM dbo.horarios WHERE materia=@materia AND seccion=@seccion**
**print 'registro '+@registro**
IF @registro = @seccion
BEGIN
SET @errores= ' La seccion y la materia ya esta creada, por favor, haga una nueva seccion'
PRINT @errores
--RAISERROR (@errores,16,1);
ROLLBACK TRANSACTION;
RETURN
END
--------------------------------------------
SELECT @registro=profesor FROM horarios WHERE dia=@dia AND hora_desde=@hora_desde AND @hora_hasta=hora_desde AND profesor=@profesor
If @registro IS NOT NULL
BEGIN
SET @errores=' el profesor ya esta asignado en este horario'
PRINT @errores
--RAISERROR (@errores,16,1);
ROLLBACK TRANSACTION;
RETURN
END
--------------------------------------------
declare @dayassig varchar(10),@desde time,@hasta time
SELECT @registro=profesor, @dayassig=dia,@desde=hora_desde,@hasta=hora_hasta FROM horarios WHERE
@dayassig=@dia and
((@desde<=@hora_desde and @hasta>@hora_desde) OR
(@desde<@hora_hasta and @hasta>=@hora_hasta))
IF @registro IS NOT NULL
BEGIN
SET @errores= @errores+' este horario choca'
PRINT @errores
--RAISERROR (@errores,16,1);
ROLLBACK TRANSACTION;
RETURN
END
END
[输出]
03 (printing input on insert seccion)
CCI-110 (printing input on insert materia)
registro **empty** (before select)
registro **03** (after select, should not be returning this)
La seccion y la materia ya esta creada, por favor, haga una nueva seccion
[数据库值]
materia aula profesor seccion dia hora_desde hora_hasta cantidad
CCI-110 501 7722 01 miercoles 12:00:00.0000000 15:00:00.0000000 25
CCI-110 501 7722 01 miercoles 12:00:00.0000000 16:00:00.0000000 25
CCI-110 501 7722 01 miercoles 14:00:00.0000000 16:00:00.0000000 25
如何看待不记录匹配input seccion 03
和materia CCI-110
,而是[output is printing on register 03]
?