求SQL语句,触发器的一些操作
(1)将S表的PRIMARYKEY完整性约束删除,编写一个S表上的触发器来完成在S表上插入记录时实现如下目标:SNO不能为空,且SNO不能重复。(2)在C表修改记录时,若...
(1) 将S表的PRIMARY KEY完整性约束删除,编写一个S表上的触发器来完成在S表上插入记录时实现如下目标:SNO 不能为空,且SNO不能重复。
(2) 在C表修改记录时,若修改的是CREDIT字段,则修改值超过6时提示出错信息并不将结果写入数据表。 展开
(2) 在C表修改记录时,若修改的是CREDIT字段,则修改值超过6时提示出错信息并不将结果写入数据表。 展开
4个回答
展开全部
(1)
alter atble S
drop constraints 完整性约束名
go
create trigger pksno on s for insert
as
declare @sno varchar(10)
select @sno=sno from inserted
if @sno is null
begin
print 'SNO不能为空'
rollback
end
if @sno in (select sno from s)
begin
print 'sno不可重复'
rollback
end
(2)
create trigger uc on c for update
as
declare @credit int
select @credit=credit from inserted
if @credit>6
begin
print '该项数据不能大于6'
rollback
end
这个是在SQL2000上实现的
alter atble S
drop constraints 完整性约束名
go
create trigger pksno on s for insert
as
declare @sno varchar(10)
select @sno=sno from inserted
if @sno is null
begin
print 'SNO不能为空'
rollback
end
if @sno in (select sno from s)
begin
print 'sno不可重复'
rollback
end
(2)
create trigger uc on c for update
as
declare @credit int
select @credit=credit from inserted
if @credit>6
begin
print '该项数据不能大于6'
rollback
end
这个是在SQL2000上实现的
展开全部
(1)
alter atble S
drop constraints 完整性约束名
go
create trigger s_insert
on s after insert
as
if exists(select sno from inserted where sno in (select sno from s))|| exists(select sno from inserted where sno is null)
(2)
create trigger c_update
on c after update
as
if exists(select * from inserted where CREDIT>6)
begin
print 'CREDIT is error!'
rollback transaction
end
alter atble S
drop constraints 完整性约束名
go
create trigger s_insert
on s after insert
as
if exists(select sno from inserted where sno in (select sno from s))|| exists(select sno from inserted where sno is null)
(2)
create trigger c_update
on c after update
as
if exists(select * from inserted where CREDIT>6)
begin
print 'CREDIT is error!'
rollback transaction
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先建一个用户提示信息 ,后面触发器可以调用
sp_addmessage 50001,16,N'%1s',us_english
(1)
create trigger tr_s_insert on s
for insert
as
declare @li_ret int
select @li_ret = COUNT(*) from inserted a,s b where a.sno =b.sno
if (@li_ret >1 or exists (select 1 from inserted where sno is null or sno ='' ) )
begin
raiserror(50001,16,1,'sno有重复、为空格或为空!')
ROLLBACK TRANSACTION
end
go
------------------------------------------------------------------------------------------------
(2)
create trigger tr_c_up on c
for update
as
if exists(select * from inserted where credit>6)
begin
raiserror(50001,16,1,'credit 最大允许值为6!')
rollback transaction
end
------------------------------------------------------------------------------------------------
以上语句在SQL2005以上测试通过
sp_addmessage 50001,16,N'%1s',us_english
(1)
create trigger tr_s_insert on s
for insert
as
declare @li_ret int
select @li_ret = COUNT(*) from inserted a,s b where a.sno =b.sno
if (@li_ret >1 or exists (select 1 from inserted where sno is null or sno ='' ) )
begin
raiserror(50001,16,1,'sno有重复、为空格或为空!')
ROLLBACK TRANSACTION
end
go
------------------------------------------------------------------------------------------------
(2)
create trigger tr_c_up on c
for update
as
if exists(select * from inserted where credit>6)
begin
raiserror(50001,16,1,'credit 最大允许值为6!')
rollback transaction
end
------------------------------------------------------------------------------------------------
以上语句在SQL2005以上测试通过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)执行alter table S drop constraints 完整性约束名;
将S表的SNO 设置为主键就行了。如果不设为主键,就要看你的要求了,比如说SNO是个自增1的序号。你可以先查询出表里面的最大序号,再插入。
(2)C表的CREDIT字段也是数字的吗?如果是的话,可以在保存时做相应的判断。
之前的回答都可以采纳,关键还是要把问题说清楚。数据库一定要把字段类型,字段值的规律和你的要求写清楚,其实问题不难。
补充:前面的答案最好有;号结束。
将S表的SNO 设置为主键就行了。如果不设为主键,就要看你的要求了,比如说SNO是个自增1的序号。你可以先查询出表里面的最大序号,再插入。
(2)C表的CREDIT字段也是数字的吗?如果是的话,可以在保存时做相应的判断。
之前的回答都可以采纳,关键还是要把问题说清楚。数据库一定要把字段类型,字段值的规律和你的要求写清楚,其实问题不难。
补充:前面的答案最好有;号结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询