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

表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

你可能感兴趣的:(存储,终端,Terminal,IM)