某表,多字段关联,多种约束,如何做(触发器实现代码)?

本文介绍了一个SQL触发器的实现方法,用于确保在表IM_Ammeter中,针对每个特定的Terminal_Id_i,Ammeter_Number_i字段的值小于等于64并且不重复。触发器通过检查新插入的数据来维护这一约束。

表AAA存在字段 ID(主键)、No( int 序号)、Name( varchar名字),如何保证同一个Name下No<64且不重复?
为什么触发器在空表时也会有一条记录存在?

--本想用CHECK来做,在网上问了好久也没有问出来,只能写触发器了。
ALTER TRIGGER [Trigger_IM_Ammeter]
on [dbo].[IM_Ammeter]
for INSERT
as
BEGIN
	declare	@Ammeter_Number_i int
	declare	@Terminal_Id_i int
	declare	@QueryCount int

	SELECT @Ammeter_Number_i=inserted.Ammeter_Number_i,
               @Terminal_Id_i=inserted.Terminal_Id_i From inserted
	If (@Ammeter_Number_i>64)	
	Begin
		raiserror('序号只能<=64',16,1)
        rollback transaction
        return
	End 
--	print('@Ammeter_Number_i='+convert( varchar(50),@Ammeter_Number_i))
--	print('@Terminal_Id_i='+convert( varchar(50),@Terminal_Id_i))

	SELECT @QueryCount=Count(*) From IM_Ammeter 
			Where Terminal_Id_i = @Terminal_Id_i 
			And Ammeter_Number_i = @Ammeter_Number_i	
	
	print('@QueryCount='+convert( varchar(50),@QueryCount))

	if(@QueryCount>1)--空值也等于1,不知道为什么
	Begin
--		raiserror('同一个终端下的电表序号不能重复',16,1)
        rollback transaction
        return
	End

--以下没有找到代码的问题?在触发器中,准备插入的记录放入缓存中,也当一条记录在用,如果是存储过程中以下代码就没有问题了。 
--	If Exists(Select Ammeter_Number_i From IM_Ammeter 
--				Where Terminal_Id_i = @Terminal_Id_i 
--				And Ammeter_Number_i = @Ammeter_Number_i)	
--	Begin
--		raiserror('同一个终端下的电表序号不能重复',16,1)
--        rollback transaction
--        return
--	End

END
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值