22,294
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE 触发器失效
(
ID INT NULL ,
马甲 INT NULL , // 检查触发器是否工作的线索
)
CREATE TABLE 触发器失效记录
(
记录 NVARCHAR(20) NULL ,
标识 INT IDENTITY(1,1),
)
CREATE TRIGGER TRIGGER_触发器失效
ON 触发器失效
FOR INSERT ,UPDATE
AS
BEGIN
DECLARE @ID INT , @马甲 INT
SELECT @ID=ID, @马甲=马甲 FROM inserted
------------------------------------------
IF(@马甲 IS NULL )
BEGIN
INSERT INTO 触发器失效记录(记录) VALUES('马甲为空')
UPDATE 触发器失效
SET 马甲=2011 WHERE ID=@ID
END
ELSE
BEGIN
INSERT INTO 触发器失效记录(记录) VALUES('马甲不为空')
END
END
--------------------------------------------
INSERT INTO 触发器失效 VALUES(1,2)
SELECT * FROM 触发器失效
SELECT * FROM 触发器失效记录
INSERT INTO 触发器失效(ID) VALUES(2)
INSERT INTO 触发器失效 VALUES(3,4)
INSERT INTO 触发器失效 VALUES(5,6),(7,8)
INSERT INTO 触发器失效(ID) VALUES(9),(10),(11) --触发器没干活的证据
INSERT INTO 触发器失效(ID) VALUES(12),(13)
------------------------------------------
/*
---------------------------------
----第一个表的数据----------
ID 马甲
1 2
2 2011
2 2011
3 4
5 6
7 8
9 2011
10 NULL
11 NULL
12 2011
13 NULL
-----------------------------
------第二个表的数据
记录 标识
马甲不为空 1
马甲为空 2
马甲为空 3
马甲不为空 4
马甲不为空 5
马甲为空 6
马甲为空 7
-----------------------------
郁闷的分割线
---------------------------
CREATE TRIGGER 花销
ON 花销
FOR INSERT ,UPDATE
AS
BEGIN
DECLARE @花销编号 NVARCHAR(12) ,@星期 CHAR(6)
SET DATEFIRST 1
SELECT @花销编号=花销编号 FROM inserted
UPDATE 花销
SET 星期=DateName(Dw,GetDate()+@@DateFirst-1) WHERE 花销编号=@花销编号
END
忐忑不安 ,以后插入数据不可靠了
CREATE TABLE 触发器失效
(
ID INT NULL ,
马甲 INT NULL , -- 检查触发器是否工作的线索
)
CREATE TABLE 触发器失效记录
(
记录 NVARCHAR(20) NULL ,
标识 INT IDENTITY(1,1),
)
CREATE TRIGGER TRIGGER_触发器失效
ON 触发器失效
FOR INSERT
AS
BEGIN
DECLARE @ID INT , @马甲 INT
DECLARE @cursor CURSOR
SET @cursor=CURSOR FOR SELECT * FROM inserted
OPEN @cursor
FETCH NEXT FROM @cursor INTO @ID,@马甲
WHILE(@@fetch_status=0)
BEGIN
IF(@马甲 IS NULL )
BEGIN
INSERT INTO 触发器失效记录(记录) VALUES('马甲为空')
UPDATE 触发器失效
SET 马甲=2011 WHERE ID=@ID
END
ELSE
BEGIN
INSERT INTO 触发器失效记录(记录) VALUES('马甲不为空')
END
FETCH NEXT FROM @cursor INTO @ID,@马甲
END
CLOSE @cursor
END
SELECT * FROM 触发器失效
SELECT * FROM 触发器失效记录
INSERT INTO 触发器失效 VALUES(1,2)
INSERT INTO 触发器失效(ID) VALUES(2)
INSERT INTO 触发器失效
SELECT 5,6
UNION ALL
SELECT 7,8
INSERT INTO 触发器失效(ID)
SELECT 9
UNION ALL
SELECT 10
UNION ALL
SELECT 11
INSERT INTO 触发器失效(ID) VALUES(9),(10),(11)
这句话编译通不过,不知道你在sql里面试了没,我的2005是通不过的!
INSERT INTO 触发器失效(ID)
SELECT 9
UNION ALL
SELECT 10
UNION ALL
SELECT 11
SELECT @ID=ID, @马甲=马甲 FROM inserted
这里的inserted是一张表存放插入的数据集,你上面的语句每次选择的都是该表的第一条记录
所以第一条后面的记录都没有更新。
用游标一条一条读取inserted里面的记录做update就可以了!
CREATE TABLE 触发器失效
(
ID INT NULL ,
马甲 INT NULL , // 检查触发器是否工作的线索
)
改
CREATE TABLE 触发器失效
(
ID INT NULL ,
马甲 INT NULL , -- 检查触发器是否工作的线索
)
我在边运行,没有问题啊。都能执行啊。
谢谢
DECLARE @a INT
DECLARE @b INT
DECLARE @c INT
DECLARE @d INT
DECLARE @e INT
DECLARE @f INT
SET @a=5
SET @b=56
SET @c=4
SET @d=2
SET @e=22
SET @f=6
INSERT INTO 触发器失效
select @a,@b UNION SELECT @c,@d UNION SELECT @e,@f ORDER BY 2
批量插入时inserted是一组数据,应该用循环读取再操作
SELECT @ID=ID, @马甲=马甲 FROM inserted放在循环体内
然后进行业务操作
CREATE TRIGGER 花销
ON 花销
FOR INSERT ,UPDATE
AS
BEGIN
DECLARE @花销编号 NVARCHAR(12) ,@星期 CHAR(6)
SET DATEFIRST 1
UPDATE 花销 SET 星期=DateName(Dw,GetDate()+@@DateFirst-1) from 花销 a,inserted b
WHERE a.花销编号=b.花销编号
END