sql - 如何触发检查用户选择它的时间是否为空?
问题描述
ALTER TRIGGER [dbo].[Check_time] on [dbo].[Schedule] after insert
AS
if exists ((select * from Schedule as S Join inserted as i on S.DDate=i.DDate AND S.ST_TIME=i.ST_TIME AND S.END_TIME=i.END_TIME))
BEGIN
print('INVALID TIME')
ROLLBACK TRANSACTION
return
END
*但是还有一个问题,用户可以在前一个用户的结束时间结束之前插入时间,我该如何解决?***
解决方案
由于您使用了触发器,我将以触发器格式回答。使用 INSTEAD OF 而不是插入后。在这种情况下,您在设置记录之前检查表。使用 2 作为建议
ALTER TRIGGER [dbo].[Check_time]
ON [dbo].[Schedule]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @Count INT = 0
SELECT @Count = COUNT(*)
FROM Schedule AS S
INNER JOIN inserted AS i ON S.DDate=i.DDate AND S.ST_TIME=i.ST_TIME AND S.END_TIME=i.END_TIME
IF ISNULL(@Count , 0) = 0
BEGIN
INSERT INTO [dbo].[Schedule] ([MID], [SID], [ST_TIME], [END_TIME], [DDate], [ST_ID])
select [MID], [SID], [ST_TIME], [END_TIME], [DDate], [ST_ID] FROM inserted
END
END
推荐阅读
- python - 使用生成的 Python 提供 API 网关验证
- php - 如何使用 PHP 关联数组作为函数调用参数?
- flutter - ListView.builder 与手动列表之间的区别?
- python - 需要一个像队列一样大小的数据结构......但我不确定我是否可以/应该在这里使用队列
- python - 如何使用 Python 删除带日期戳的文件
- shell - 匹配方括号内的确切字符串 - 以颜色打印
- c# - Entity Framework Core 中带有 IAsyncEnumerable 的 WHERE 子句会发生什么?
- javascript - React 应用可以在 Chrome 和 Firefox 上运行,但不能在 Safari 和所有 IOS 浏览器上运行
- python - 使用代理抓取时无法跟踪页面上的链接
- python - `math.floor(1 - (1 / (float("inf"))))` 不返回 0