表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