本来是两个表建的一对多关系,现在要求这个字段可为空,因为关系字段要做在一个表做主键才能建立关系,只能用别的方法来约束,我不太喜欢用程序控制,想用4个触发器来实现:
table1相当于主表(作主键)
CREATE TRIGGER [TRIGGER_table1_delete] ON dbo.TABLE1 
FOR DELETE
AS
if (Select name from deleted)<>'' and (Select name from deleted) is not null 
begin
if exists(select name from table2 where name=(select name from deleted)) 
BEGIN
ROLLBACK TRAN
RAISERROR('请先删除子级别',16,10)
END
endCREATE TRIGGER [TRIGGER_table1_update] ON dbo.TABLE1 
FOR UPDATE
AS
EXEC SP_DBOPTION ceshi,'Recursive_Triggers',TRUE
if (Select name from inserted)<>'' and (Select name from inserted) is not null 
begin
update table2 set name=(Select name from inserted) where name=(Select name from deleted)
endtable2 相当于关系中从表(作外键)
CREATE TRIGGER [TRIGGER_update] ON dbo.TABLE2 
FOR UPDATE
AS
if (Select name from inserted)<>'' and (Select name from inserted) is not null 
begin
while exists(select name from table1 where name=(Select name from inserted )) 
BEGIN
ROLLBACK TRAN
RAISERROR('名称表中不存在此名',16,10)
END
end
CREATE TRIGGER [TRIGGER_insert] ON dbo.TABLE2 
FOR INSERT
AS
if (Select name from inserted)<>'' and (Select name from inserted) is not null 
begin
if not exists(select name from table1 where name=(Select name from inserted )) 
BEGIN
ROLLBACK TRAN
RAISERROR('名称表中不存在此名',16,10)
END
end
现在只存在两个问题:1 表table1更新是带动 table2 的update触发器,系统不让table2更新,RAISERROR('名称表中不存在此名',16,10)2 如何把触发器改成:在多条记录同时更新它也做多次触发。网上说用@@rowcount一条一条的,我还没有好的写法