触发器 子查询返回的值不止一个
为防止接单接受超过10天的单,写了以下触发器,当一条一条的插入时没问题,但如果同时插入多条数据,有一条日期超过了10天,所有数据都停止,触发器能否做到插入多条数据时放行满...
为防止接单接受超过10天的单,写了以下触发器,当一条一条的插入时没问题,但如果同时插入多条数据,有一条日期超过了10天,所有数据都停止 ,触发器能否做到插入多条数据时放行满足条件的,不满足的不插入?
alter trigger [tr_3567]
on [dbo].[post]
after insert
as
if exists(select * from inserted where date>(select CONVERT(varchar(12), getdate()+10, 23)))
begin
RAISERROR('“不接超过10天的单!”',16,1)
ROLLBACK
RETURN
end 展开
alter trigger [tr_3567]
on [dbo].[post]
after insert
as
if exists(select * from inserted where date>(select CONVERT(varchar(12), getdate()+10, 23)))
begin
RAISERROR('“不接超过10天的单!”',16,1)
ROLLBACK
RETURN
end 展开
展开全部
可以做到呀
select * from inserted where date>(select CONVERT(varchar(12), getdate()+10, 23))
这个是大于10天的
select * from inserted where date <= (select CONVERT(varchar(12), getdate()+10, 23))
这个就是10天内的数据啊
你想怎么操作?
ps:你的触发器是after类型的,这样插入的数据已经插入进去了,如果你想做到不符合的数据不要插进去,那应该用instead 类型的
select * from inserted where date>(select CONVERT(varchar(12), getdate()+10, 23))
这个是大于10天的
select * from inserted where date <= (select CONVERT(varchar(12), getdate()+10, 23))
这个就是10天内的数据啊
你想怎么操作?
ps:你的触发器是after类型的,这样插入的数据已经插入进去了,如果你想做到不符合的数据不要插进去,那应该用instead 类型的
更多追问追答
追问
我用的就是instead类型的也
追答
但是你问题里明明写的是
alter trigger [tr_3567]
on [dbo].[post]
after insert
as
。。。 。。。
呵呵
可以
insert into post
select * from inserted where date <= (select CONVERT(varchar(12), getdate()+10, 23))
这样就是插入符合条件的
展开全部
LZ用游标试试 你用下面代码测试一下 看看行不行
alter trigger [tr_3567]
on [dbo].[post]
after insert
as
DECLARE MyCursor CURSOR
FOR SELECT date FROM inserted
OPEN MyCursor
DECLARE @date datetime
FETCH NEXT FROM MyCursor INTO @date
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@date > getdate() + 10)
BEGIN
RAISERROR('“不接超过10天的单!”',16,1)
ROLLBACK
END
END
alter trigger [tr_3567]
on [dbo].[post]
after insert
as
DECLARE MyCursor CURSOR
FOR SELECT date FROM inserted
OPEN MyCursor
DECLARE @date datetime
FETCH NEXT FROM MyCursor INTO @date
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@date > getdate() + 10)
BEGIN
RAISERROR('“不接超过10天的单!”',16,1)
ROLLBACK
END
END
追问
不行,插入多条其中有一条不满足还是失败!
追答
DECLARE MyCursor CURSOR
FOR SELECT date FROM inserted
OPEN MyCursor
DECLARE @date datetime
FETCH NEXT FROM MyCursor INTO @date
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@date > getdate() + 10)
BEGIN
RAISERROR('“不接超过10天的单!”',16,1)
ROLLBACK
CONTINUE
END
END
加个continue再试试 应该没问题了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
触发器不是干这个使得,你要想实现满足条件写入,不满足不写入的话,应该在存储过程里直接写,而不是在触发器里想办法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询