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

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

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

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

下面是一个例子:

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 行受影响)

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

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

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

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

选中要 *** 作的窗体,右键选“设计视图”,在打开的设计视图【窗体】属性中点击上方的“事件”选项卡,选中【加载】,然后点击后面的?按钮,d出窗口中选择【宏生成器】或者【代码生成器】,然后对照下面 *** 作:\r\n方法一、【宏生成器】法:\r\n1、d出的对话框中先给宏指定一个名称,比如:添加新记录\r\n2、在【添加新记录: 宏】窗口的“ *** 作”处选择:GoToRecord\r\n然后在下面的“ *** 作参数”处进行如下设置:\r\n1)对象类型:窗体\r\n2)对象名称:选你要 *** 作的窗体\r\n3)记录:选“新记录”\r\n4)保存退出。\r\n方法二、【代码生成器】法:\r\n在d出的VB编辑器中鼠标光标激活处添加如下代码:\r\nDoCmd.GoToRecord , , acNewRec\r\n然后关闭VB编辑器。\r\n最后:无论采取那个方法,关闭窗体的“设计视图”时选“保存”即可!


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存