sql在视图中如何插入新的数据?

 我来答
金木南影娱
高粉答主

推荐于2019-10-21 · 影娱天下乐事,尽在金木南!
金木南影娱
采纳数:723 获赞数:27549

向TA提问 私信TA
展开全部

对于 单表的视图, 插入/修改 数据是没有问题的。 (只要你不做特别的设置)

对于多表的视图, 操作的时候,会存在一定的问题。

下面是一个例子:

1> CREATE VIEW v_main_sub AS

2> SELECT

3>   test_main.id AS main_id,

4>   test_main.value AS main_value,

5>   test_sub.id  AS  sub_id,

6>   test_sub.value AS sub_value

7> FROM

8>   test_main, test_sub

9> WHERE

10>   test_main.id = test_sub.main_id;

11> go

1> SELECT * FROM v_main_sub;

2> go

main_id     main_value sub_id      sub_value

----------- ---------- ----------- ----------

1 ONE                  1 ONEONE

2 TWO                  2 TWOTWO

(2 行受影响)

1> UPDATE v_main_sub

2> SET main_value='ONX'

3> WHERE main_id = 1;

4> go

(1 行受影响)

1> UPDATE v_main_sub

2> SET sub_value='ONXONX'

3> WHERE main_id = 1;

4> go

(1 行受影响)

1> DELETE FROM v_main_sub WHERE main_id = 1;

2> go

消息 4405,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,第 1 行

视图或函数 'v_main_sub' 不可更新,因为修改会影响多个基表。

-- 这个触发器, 只测试输出, 不删除数据。

1> CREATE TRIGGER  v_main_sub_trigger

2> ON  v_main_sub

3> INSTEAD OF DELETE

4> AS

5> DECLARE

6>   @main_id  INT,

7>   @sub_id   INT;

8> BEGIN

9>   SELECT @main_id=main_id, @sub_id=sub_id FROM deleted;

10>

11>

12>   PRINT(@main_id);

13>   PRINT(@sub_id);

14> END;

15> go

1> DELETE FROM v_main_sub WHERE main_id = 1;

2> go

1

1

(1 行受影响)

1> DELETE FROM v_main_sub WHERE sub_id = 1;

2> go

1

1

(1 行受影响)

对于多表关联的视图, 删除的时候,需要人为的去判断

例如当 主表 和 子表,都只有一条记录的情况下。

无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。

还是 主表 子表的数据,一同删除。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式