--创建触发器Trigger_NowDuty CREATE TRIGGER Trigger_NowDuty ON Sal_HumanInfo_AdminOrClanDuty FOR INSERT, UPDATE, DELETE AS declare @Table1 table (Fld1 nvarchar(25) not null , Fld2 nvarchar(100) not null primary key (Fld1,Fld2)) declare @t_temp table (Fld1 nvarchar(25) not null , Fld2 nvarchar(100) not null primary key (Fld1,Fld2)) insert into @Table1 select num,DutyName from Sal_HumanInfo_AdminOrClanDuty where IfCurrently = '是' union select a.num,b.name from Sal_HumanInfo_ProfessionalDuty a join code_posttitle b on a.EngageDutyName=b.code where a.IfCurrently='是' union select num,TitleName from Sal_HumanInfo_NationProfessionTitle where IfCurrently = '是' DECLARE @c_Fld nvarchar(25), @c_Fld1 nvarchar(25), @c_Fld2 nvarchar(100) DECLARE first_cursor CURSOR FOR SELECT distinct Fld1 FROM @Table1 ORDER BY Fld1 OPEN first_cursor FETCH first_cursor INTO @c_Fld WHILE @@FETCH_STATUS = 0 BEGIN DECLARE second_cursor CURSOR FOR SELECT Fld1, Fld2 FROM @Table1 WHERE Fld1 = @c_Fld OPEN second_cursor FETCH second_cursor INTO @c_Fld1 , @c_Fld2 SELECT @c_Fld1 = @c_Fld WHILE @@FETCH_STATUS = 0 BEGIN IF NOT EXISTS(SELECT 1 FROM @t_temp WHERE Fld1 = @c_Fld) BEGIN INSERT INTO @t_temp(Fld1 , Fld2) VALUES( @c_Fld1 , @c_Fld2 ) END ELSE BEGIN UPDATE @t_temp SET Fld2=Fld2 + ',' + @c_Fld2 WHERE Fld1 = @c_Fld1 END FETCH second_cursor INTO @c_Fld1 , @c_Fld2 SELECT @c_Fld1 = @c_Fld END CLOSE second_cursor DEALLOCATE second_cursor FETCH first_cursor INTO @c_Fld END CLOSE first_cursor DEALLOCATE first_cursor UPDATE Sal_HumanInfo SET NowDuty = (SELECT Fld2 FROM @t_temp WHERE Fld1 = Num)--
我的帖子,希望能帮到你蚂蚁的 : 你在MMC中删除或更新时,因为它要去找能确定你要删除或更新的记录的条件,就象 delect table where aa=xx and bb=YY 但是这个条件在表中有两条记录,所以系统认为你的条件不充分,所以它不知道应该把两条中的哪一条删除,所以出现上面的提示。 TRY: select * into #temp from table where ........ --条件选出那两条 delete table where.......insert into table select top1 * from #temp
to 雨子, 我那个肯定是触发器的问题 在没有建立触发器之前都是正确的 建立之后在delphi里面就不能对他进行添加修改删除了 问题是具体出在什么地方
在触发器代码AS后加一行
SET NOCOUNT ON
CREATE TRIGGER Trigger_NowDuty
ON Sal_HumanInfo_AdminOrClanDuty
FOR INSERT, UPDATE, DELETE
AS
declare @Table1 table (Fld1 nvarchar(25) not null , Fld2 nvarchar(100) not null primary key (Fld1,Fld2))
declare @t_temp table (Fld1 nvarchar(25) not null , Fld2 nvarchar(100) not null primary key (Fld1,Fld2))
insert into @Table1
select num,DutyName from Sal_HumanInfo_AdminOrClanDuty where IfCurrently = '是'
union select a.num,b.name from Sal_HumanInfo_ProfessionalDuty a join code_posttitle b on a.EngageDutyName=b.code where a.IfCurrently='是'
union select num,TitleName from Sal_HumanInfo_NationProfessionTitle where IfCurrently = '是'
DECLARE @c_Fld nvarchar(25),
@c_Fld1 nvarchar(25),
@c_Fld2 nvarchar(100)
DECLARE first_cursor CURSOR FOR
SELECT distinct Fld1 FROM @Table1 ORDER BY Fld1
OPEN first_cursor
FETCH first_cursor INTO @c_Fld
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE second_cursor CURSOR FOR
SELECT Fld1, Fld2 FROM @Table1 WHERE Fld1 = @c_Fld
OPEN second_cursor
FETCH second_cursor INTO @c_Fld1 , @c_Fld2
SELECT @c_Fld1 = @c_Fld
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT 1 FROM @t_temp WHERE Fld1 = @c_Fld)
BEGIN
INSERT INTO @t_temp(Fld1 , Fld2)
VALUES( @c_Fld1 , @c_Fld2 )
END ELSE
BEGIN
UPDATE @t_temp SET Fld2=Fld2 + ',' + @c_Fld2
WHERE Fld1 = @c_Fld1
END
FETCH second_cursor INTO @c_Fld1 , @c_Fld2
SELECT @c_Fld1 = @c_Fld
END
CLOSE second_cursor
DEALLOCATE second_cursor
FETCH first_cursor INTO @c_Fld
END
CLOSE first_cursor
DEALLOCATE first_cursor
UPDATE Sal_HumanInfo
SET NowDuty = (SELECT Fld2 FROM @t_temp WHERE Fld1 = Num)--
http://expert.csdn.net/Expert/topic/2265/2265390.xml?temp=.9610102
:
你在MMC中删除或更新时,因为它要去找能确定你要删除或更新的记录的条件,就象
delect table where aa=xx and bb=YY
但是这个条件在表中有两条记录,所以系统认为你的条件不充分,所以它不知道应该把两条中的哪一条删除,所以出现上面的提示。
TRY:
select * into #temp from table where ........ --条件选出那两条
delete table where.......insert into table
select top1 * from #temp
我那个肯定是触发器的问题
在没有建立触发器之前都是正确的
建立之后在delphi里面就不能对他进行添加修改删除了
问题是具体出在什么地方
把触发器分为三个,分别处理for insert,for delete,for update的情况
分成三个还是不行
请各位通道继续赐教
当然,更有可能我本愚笨,否则也会在第一个项目中硬着头皮充分利用触发器。至于现在,无所谓用和不用,看哪个更快。
其实我从来没有用过触发器
也很不赞成用触发器
但现在我们做了个接收覆盖的功能
捕捉不到After和Before等事件
所以才要用触发器