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

sql在视图中如何插入新的数据?,第1张

对于 单表的视图插入/修改 数据是没有问题的。 (只要你不做特别的设置)\x0d\x0a\x0d\x0a对于多表的视图, *** 作的时候,会存在一定的问题。\x0d\x0a\x0d\x0a下面是一个例子:\x0d\x0a\x0d\x0a1>CREATE VIEW v_main_sub AS\x0d\x0a2>SELECT\x0d\x0a3> test_main.id AS main_id,\x0d\x0a4> test_main.value AS main_value,\x0d\x0a5> test_sub.id AS sub_id,\x0d\x0a6> test_sub.value AS sub_value\x0d\x0a7>FROM\x0d\x0a8> test_main, test_sub\x0d\x0a9>WHERE\x0d\x0a10> test_main.id = test_sub.main_id\x0d\x0a11>go\x0d\x0a\x0d\x0a1>SELECT * FROM v_main_sub\x0d\x0a2>go\x0d\x0amain_id main_value sub_id sub_value\x0d\x0a----------- ---------- ----------- ----------\x0d\x0a 1 ONE 1 ONEONE\x0d\x0a 2 TWO 2 TWOTWO\x0d\x0a\x0d\x0a(2 行受影响)\x0d\x0a\x0d\x0a1>UPDATE v_main_sub\x0d\x0a2>SET main_value='ONX'\x0d\x0a3>WHERE main_id = 1\x0d\x0a4>go\x0d\x0a\x0d\x0a(1 行受影响)\x0d\x0a\x0d\x0a1>UPDATE v_main_sub\x0d\x0a2>SET sub_value='ONXONX'\x0d\x0a3>WHERE main_id = 1\x0d\x0a4>go\x0d\x0a\x0d\x0a(1 行受影响)\x0d\x0a\x0d\x0a1>DELETE FROM v_main_sub WHERE main_id = 1\x0d\x0a2>go\x0d\x0a消息 4405,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,凳或第 1 行\x0d\x0a视图或函数 'v_main_sub' 不可更新,因为修改会影响多个基表。\x0d\x0a\x0d\x0a-- 这个触发器, 只测试输出, 不删除数枣含伍老扰据。\x0d\x0a1>CREATE TRIGGER v_main_sub_trigger\x0d\x0a2>ON v_main_sub\x0d\x0a3>INSTEAD OF DELETE\x0d\x0a4>AS\x0d\x0a5>DECLARE\x0d\x0a6> @main_id INT,\x0d\x0a7> @sub_id INT\x0d\x0a8>BEGIN\x0d\x0a9> SELECT @main_id=main_id, @sub_id=sub_id FROM deleted\x0d\x0a10>\x0d\x0a11>\x0d\x0a12> PRINT(@main_id)\x0d\x0a13> PRINT(@sub_id)\x0d\x0a14>END\x0d\x0a15>go\x0d\x0a\x0d\x0a1>DELETE FROM v_main_sub WHERE main_id = 1\x0d\x0a2>go\x0d\x0a1\x0d\x0a1\x0d\x0a\x0d\x0a(1 行受影响)\x0d\x0a1>DELETE FROM v_main_sub WHERE sub_id = 1\x0d\x0a2>go\x0d\x0a1\x0d\x0a1\x0d\x0a\x0d\x0a(1 行受影响)\x0d\x0a\x0d\x0a对于多表关联的视图, 删除的时候,需要人为的去判断\x0d\x0a例如当 主表 和 子表,都只有一条记录的情况下。\x0d\x0a无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。\x0d\x0a还是 主表 子表的数据,一同删除。

进入ACCESS后,用SQL视图

然后用SQL语句插入

Insert into 表(字槐迹段1,字段2,...) values(值1,值2,....)

这早明并样就陆迹OK了

楼上说的部分是对的,但有几点需要指出。如果你的id字段是自增的标识字段的话,它的序号是不可逆的(我说的是自动,当然手动可是实现重新顺序编号),再就是sql200中你不能在两行记录之间再插入一行的(让新插入的记录再原记录之间)。

1、像你说方法在形式上可以达到预想的效果:看上去好像在原来的衡亮脊第2行记录与第3行记录之间“插入”了一条新记录,但是前面的ID列(如果是自增的话)是不会再按1、2、3、4的顺序重新编号的,他是不会咐渗自动重新顺序编号的,他会变成1、2、4、5……

2、你的想法是完全没有必要的。对于数据库每条记录之间是完全平等的关系,不管数据库中谁在上谁在下。数据库只是一个存放数据的仓库,如果要向用户展示里面的数据的话是要用视图或者查询的,不会直接取数据表中人为的找的,要是那样也就失去数据库的本质变成了一般的数据文件了。

3、数据库一般都键侍会结合某种应用程序联合应用,起到快速检索用户所需数据的作用,并能实现一定的排序、分组、统计等功能。

综上建议你不要继续你的工作。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11976940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存