Ⅰ sql在视图中如何插入新的数据
对于 单表的视图, 插入/修改 数据是没有问题的。 (只要你不做特别的设置)
对于多表的视图, 操作的时候,会存在一定的问题。
下面是一个例子:
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-PCSQLEXPRESS,第 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 行受影响)
对于多表关联的视图, 删除的时候,需要人为的去判断
例如当 主表 和 子表,都只有一条记录的情况下。
无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。
还是 主表 子表的数据,一同删除。
Ⅱ 简述SQL中对视图进行插入操作的视图中来引用的字段,必须具备的条件
视图中的数据只能来自一个表
视图中必须包含来源表的关键字段
Ⅲ SqlServer往视图中插入数据的问题!!
视图是由多个表,根据某种关系连接在一起的记录集合,如果要插入数据,应该根据逻辑关系和主外键关系,对表插入数据。
比如说 学校表,班级表,学生表,其关系假设为
学校表---->班级表---->学生表 从前到后为一对多的关系,即前一个是后一个的主表,后一个是前一个的从表
当建立学生视图,此时要插入学生记录,则直接插入学生表,要插入班级记录,则直接插入到班级表,前提是,主表必须先有记录,从表才能插入
Ⅳ 如何在sql server数据库的视图上插入新的数据
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
当建立视图时使用的表中的数据发生了改变后,视图中的数据也会发生相应的改变,视图本身是不能执行添加,删除,修改的!
如果要插入新数据的话,建议使用触发器,在视图相对应的各表中插入数据。视图中自然更新。
Ⅳ sql在视图中如何插入新的数据
对于 单表的视图, 插入/修改 数据是没有问题的。 (只要你不做特别的设置)x0dx0ax0dx0a对于多表的视图, 操作的时候,会存在一定的问题。x0dx0ax0dx0a下面是一个例子:x0dx0ax0dx0a1> CREATE VIEW v_main_sub ASx0dx0a2> SELECTx0dx0a3> test_main.id AS main_id,x0dx0a4> test_main.value AS main_value,x0dx0a5> test_sub.id AS sub_id,x0dx0a6> test_sub.value AS sub_valuex0dx0a7> FROMx0dx0a8> test_main, test_subx0dx0a9> WHEREx0dx0a10> test_main.id = test_sub.main_id;x0dx0a11> gox0dx0ax0dx0a1> SELECT * FROM v_main_sub;x0dx0a2> gox0dx0amain_id main_value sub_id sub_valuex0dx0a----------- ---------- ----------- ----------x0dx0a 1 ONE 1 ONEONEx0dx0a 2 TWO 2 TWOTWOx0dx0ax0dx0a(2 行受影响)x0dx0ax0dx0a1> UPDATE v_main_subx0dx0a2> SET main_value='ONX'x0dx0a3> WHERE main_id = 1;x0dx0a4> gox0dx0ax0dx0a(1 行受影响)x0dx0ax0dx0a1> UPDATE v_main_subx0dx0a2> SET sub_value='ONXONX'x0dx0a3> WHERE main_id = 1;x0dx0a4> gox0dx0ax0dx0a(1 行受影响)x0dx0ax0dx0a1> DELETE FROM v_main_sub WHERE main_id = 1;x0dx0a2> gox0dx0a消息 4405,级别 16,状态 1,服务器 GMJ-PC\SQLEXPRESS,第 1 行x0dx0a视图或函数 'v_main_sub' 不可更新,因为修改会影响多个基表。x0dx0ax0dx0a-- 这个触发器, 只测试输出, 不删除数据。x0dx0a1> CREATE TRIGGER v_main_sub_triggerx0dx0a2> ON v_main_subx0dx0a3> INSTEAD OF DELETEx0dx0a4> ASx0dx0a5> DECLAREx0dx0a6> @main_id INT,x0dx0a7> @sub_id INT;x0dx0a8> BEGINx0dx0a9> SELECT @main_id=main_id, @sub_id=sub_id FROM deleted;x0dx0a10>x0dx0a11>x0dx0a12> PRINT(@main_id);x0dx0a13> PRINT(@sub_id);x0dx0a14> END;x0dx0a15> gox0dx0ax0dx0a1> DELETE FROM v_main_sub WHERE main_id = 1;x0dx0a2> gox0dx0a1x0dx0a1x0dx0ax0dx0a(1 行受影响)x0dx0a1> DELETE FROM v_main_sub WHERE sub_id = 1;x0dx0a2> gox0dx0a1x0dx0a1x0dx0ax0dx0a(1 行受影响)x0dx0ax0dx0a对于多表关联的视图, 删除的时候,需要人为的去判断x0dx0a例如当 主表 和 子表,都只有一条记录的情况下。x0dx0a无法判断 本次删除, 是要删除掉一个子表的记录,留下主表的。x0dx0a还是 主表 子表的数据,一同删除。
Ⅵ 创建一个视图 插入相关数据 SQL
创建数据表
create
table
table_name
(
[column_name]
data_type
constraint,
[column2_name]
data_type
consraint,
[column3_name]
data_type
constraint
)
插入数据
insert
into
table_name([column_name],[column_name1],[column_name2])
values
('something','something','something')
还有很多的东西
比如说修改、删除表;添加、修改、删除约束;添加、修改、删除列等。都是基础的东西
不是很难
Ⅶ sql server中如何添加视图
视图-》新建新视图,选择表,关联成视图;
或者直接用sql语句生成视图;
********
找到视图 (View) 右键肯定有新建视图的
用语句就是你所要数据的查询语句,直接放到一个新建视图的Sql语句部分,生成就ok了!
Ⅷ sql视图插入数据
如果视图仅包含2列,那么语法没有错误。
出错的原因可能是视图是基表所有列中的一部分而基表中其它列不允许为空,或者基表是多个表join,多个表作为基表的视图不能进行insert。
如果视图的列多于2列,你的语法就是错误的,必须在表名后指定列名。
INSERT INTO V_SALERS(列1,列2)
VALUES('S6','联想集团')