您的位置:首页 > 编程语言

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

2011-07-17 16:36 323 查看
表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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐