关于SQL的一个问题,求高手指教
有两张表:table_1,table_2table_1codehxrqjkztuserid1201005121630102220100612163010232010071...
有两张表:table_1,table_2
table_1
code hxrq jkzt userid
1 20100512 1 630102
2 20100612 1 630102
3 20100712 2 630103
4 20100811 3 630102
5 20100910 4 630102
table_2
code userid user_zt
1 630102 1
假如在table_1表中写入
6 20101010 5 630102
这样一条记录后,自动的让所有 userid=‘630102’的记录中jkzt字段都等于5,userid=‘630103’的记录不改变
并且table_2表中userid=‘630102’记录中user_zt 也等于 5
jkzt列表示借款状态,1表示正常,2表示逾期……,5表示已还款。
当这一列的最后一条记录等于5时,所有这个人的相关借款记录应该都变为5已还款
用什么做呢?存储过程还是视图还是什么可以达到这个功能呢? 展开
table_1
code hxrq jkzt userid
1 20100512 1 630102
2 20100612 1 630102
3 20100712 2 630103
4 20100811 3 630102
5 20100910 4 630102
table_2
code userid user_zt
1 630102 1
假如在table_1表中写入
6 20101010 5 630102
这样一条记录后,自动的让所有 userid=‘630102’的记录中jkzt字段都等于5,userid=‘630103’的记录不改变
并且table_2表中userid=‘630102’记录中user_zt 也等于 5
jkzt列表示借款状态,1表示正常,2表示逾期……,5表示已还款。
当这一列的最后一条记录等于5时,所有这个人的相关借款记录应该都变为5已还款
用什么做呢?存储过程还是视图还是什么可以达到这个功能呢? 展开
3个回答
展开全部
楼主这种情况,可以使用2种方案:
1、不直接用 INSERT 语句来插入数据。
专门写个存储过程,传入参数,判断插入、更新等操作逻辑。
只通过这个存储过程来负责插入数据的操作。
缺点是 假如这个表, 有人直接用 INSERT 语句插入数据了,那么可能就会产生一些问题。
=================================================
2、使用“触发器”
就是 插入数据的“之前” 或者 “之后”
判断 那个 jkzt 是否等于 5 。
如果满足的, 都额外更新另外几个数据。
如果不满足,就不做额外的动作。
=================================================
下面是使用触发器的例子代码 与执行结果:
1> CREATE TABLE table_1 (
2> code INT,
3> hxrq INT,
4> jkzf INT,
5> userid INT
6> );
7> GO
1>
2>
3> INSERT INTO table_1 VALUES (1,20100512,1,630102);
4> INSERT INTO table_1 VALUES (2,20100612,1,630102);
5> INSERT INTO table_1 VALUES (3,20100712,2,630103);
6> INSERT INTO table_1 VALUES (4,20100811,3,630102);
7> INSERT INTO table_1 VALUES (5,20100910,4,630102);
8> GO
(1 行受影响)
1>
2>
3> CREATE TABLE table_2(
4> code INT,
5> userid INT,
6> user_zt INT
7> );
8> GO
1>
2> INSERT INTO table_2 VALUES (1,630102,1);
3> GO
(1 行受影响)
1> CREATE TRIGGER AfterInsertTable_1
2> ON table_1
3> FOR INSERT
4> AS
5> DECLARE
6> @InsertUserID INT, -- 用于暂存 Insert 进来的 UserID
7> @InsertJkzf INT; -- 用于暂存 Insert 进来的 JKZF
8> BEGIN
9>
10> -- 取得本次插入的 ID, JKZF 数据.
11> SELECT @InsertUserID = userid, @InsertJkzf = jkzf FROM inserted;
12>
13> -- 判断 如果 本次插入的 JKZF = 5,那么更新 “该用户” 其他数据
14> IF @InsertJkzf = 5
15> BEGIN
16> UPDATE table_1 SET jkzf = 5 WHERE userid=@InsertUserID;
17> UPDATE table_2 SET user_zt = 5 WHERE userid=@InsertUserID;
18> END;
19>
20> END;
21> go
1>
2> INSERT INTO table_1 VALUES (6,20101010,5,630102);
3> go
(5 行受影响)
1>
2> SELECT * FROM table_1;
3> go
code hxrq jkzf userid
----------- ----------- ----------- -----------
1 20100512 5 630102
2 20100612 5 630102
3 20100712 2 630103
4 20100811 5 630102
5 20100910 5 630102
6 20101010 5 630102
(6 行受影响)
1>
2> SELECT * FROM table_2;
3> go
code userid user_zt
----------- ----------- -----------
1 630102 5
(1 行受影响)
1>
2>
1、不直接用 INSERT 语句来插入数据。
专门写个存储过程,传入参数,判断插入、更新等操作逻辑。
只通过这个存储过程来负责插入数据的操作。
缺点是 假如这个表, 有人直接用 INSERT 语句插入数据了,那么可能就会产生一些问题。
=================================================
2、使用“触发器”
就是 插入数据的“之前” 或者 “之后”
判断 那个 jkzt 是否等于 5 。
如果满足的, 都额外更新另外几个数据。
如果不满足,就不做额外的动作。
=================================================
下面是使用触发器的例子代码 与执行结果:
1> CREATE TABLE table_1 (
2> code INT,
3> hxrq INT,
4> jkzf INT,
5> userid INT
6> );
7> GO
1>
2>
3> INSERT INTO table_1 VALUES (1,20100512,1,630102);
4> INSERT INTO table_1 VALUES (2,20100612,1,630102);
5> INSERT INTO table_1 VALUES (3,20100712,2,630103);
6> INSERT INTO table_1 VALUES (4,20100811,3,630102);
7> INSERT INTO table_1 VALUES (5,20100910,4,630102);
8> GO
(1 行受影响)
1>
2>
3> CREATE TABLE table_2(
4> code INT,
5> userid INT,
6> user_zt INT
7> );
8> GO
1>
2> INSERT INTO table_2 VALUES (1,630102,1);
3> GO
(1 行受影响)
1> CREATE TRIGGER AfterInsertTable_1
2> ON table_1
3> FOR INSERT
4> AS
5> DECLARE
6> @InsertUserID INT, -- 用于暂存 Insert 进来的 UserID
7> @InsertJkzf INT; -- 用于暂存 Insert 进来的 JKZF
8> BEGIN
9>
10> -- 取得本次插入的 ID, JKZF 数据.
11> SELECT @InsertUserID = userid, @InsertJkzf = jkzf FROM inserted;
12>
13> -- 判断 如果 本次插入的 JKZF = 5,那么更新 “该用户” 其他数据
14> IF @InsertJkzf = 5
15> BEGIN
16> UPDATE table_1 SET jkzf = 5 WHERE userid=@InsertUserID;
17> UPDATE table_2 SET user_zt = 5 WHERE userid=@InsertUserID;
18> END;
19>
20> END;
21> go
1>
2> INSERT INTO table_1 VALUES (6,20101010,5,630102);
3> go
(5 行受影响)
1>
2> SELECT * FROM table_1;
3> go
code hxrq jkzf userid
----------- ----------- ----------- -----------
1 20100512 5 630102
2 20100612 5 630102
3 20100712 2 630103
4 20100811 5 630102
5 20100910 5 630102
6 20101010 5 630102
(6 行受影响)
1>
2> SELECT * FROM table_2;
3> go
code userid user_zt
----------- ----------- -----------
1 630102 5
(1 行受影响)
1>
2>
展开全部
汗,都不说清楚,怎么解决了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
insert into table_1 (code,hxrq,jkzt,userid) values('6','20101010','5','630102');
update table_1 set jkzt = '5' where userid=‘630102’;
update table_2 set user_zt = '5';
方法1: 可以用表关联实现,
方法2: 可以用代码实现,加事务回滚。
update table_1 set jkzt = '5' where userid=‘630102’;
update table_2 set user_zt = '5';
方法1: 可以用表关联实现,
方法2: 可以用代码实现,加事务回滚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询