SQLServer视图用insert into插入,报错!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer视图用insert into插入,报错!!相关的知识,希望对你有一定的参考价值。

CREATE VIEW v_开课信息(课程号,课程名,开课学期,学时)ASSELECT 课程号,课程名,开课学期,学时FROM 课程表 WHERE 开课学期>=31、请问创建视图之后,能否用insert into插入新的数据?2、插入数据到视图,为什么会提示视图对应的表不能有空列???
课程表的列名和约束如下图所示,由“课程表”创建的视图只包含“课程号、课程名、开课学期、学时”

你要知道,当你在你这个视图后插入一条数据的时候,同时需要在课程表里也加一条数据,因为你这个视图本身就是create view 从别的表里生成的数据,但是你插入视图这条数据后,因为没给这条数据一个“序号”的值,所以报错。
正常做法是,你要想往视图插入数据,应该对表操作,而不是直接insert into 视图。
参考技术A 插入的列个数不够,你应该检查一下追问

题目要求:视图中包含列“课程号”、“课程名”、“开课学期”和“学时”。
就上面这四列,insert时输入的列的数量是够得,视图并不包含“序号”列。

追答

视图是续表,不能insert into同学,概念不清
create view as select 课程号,课程名,开课学期,学时 from 课程表

SQLServer

--INSERT 插入单行
insert [into] <表名> (列名) values (列值)
例:insert into Strdents (姓名,性别,出生日期) values (‘过儿‘,‘女‘,‘1998/5/5‘)

--INSERT  没有指定插入的列则表示全部插入标识列除外

insert [into] <表名> values (列值)
例:insert into Strdents  values (‘过儿‘,‘女‘,‘1998/5/5‘)

--INSERT 直接拿现有表数据创建一个新表并填充数据

select <新建表列名> into <新建表名> from <源表名>
例:select name,sex,address into class from strdents

--INSERT 通过查询其他表的数据插入数据 

insert [into] <表名> (列名) select (列名) from <源表名>
例:insert into Strdents(姓名,性别,出生日期) select (姓名,性别,出生日期) from class

 

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

 

--更新/修改数据记录

update <表名> set <列名=更新值> [where <更新条件>]
例:update class set sex=0,adderss=‘河南‘ where 姓名=‘小磊子‘

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

 

--删除数据记录

delete from <表名> [where <删除条件>]
例:delete from students where name=‘过儿‘(删除表students中列值为‘’过儿‘’的行)

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

 

--删除表

truncate table <表名>

注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用于有外建约束引用的表

 

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

1``精确(条件)查询
select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]

1.1【查询所有数据行和列】
例:select * from a
说明:查询a表中所有行和列


1.2【查询部分行列--条件查询】
例:select i,j,k from a where f=5
说明:查询表a中f=5的所有行,并显示i,j,k3列

1.3【在查询中使用AS更改列名】
例:select name as 姓名 from a where xingbie=‘男‘
说明:查询a表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示

1.4【查询空行】
例:select name from a where email is null
说明:查询表a中email为空的所有行,并显示name列;SQL语句中用is null或者is not null来判断是否为空行

1.5【在查询中使用常量】
例:select name, ‘唐山‘ as 地址 from Student
说明:查询表a,显示name列,并添加地址列,其列值都为‘唐山‘

1.6【查询返回限制行数(关键字:top percent)】
例1:select top 6 name from a
说明:查询表a,显示列name的前6行,top为关键字
例2:select top 60 percent name from a
说明:查询表a,显示列name的60%,percent为关键字

1.7【查询排序(关键字:order by , asc , desc)】
例:select name
from a
where chengji>=60
order by desc
说明:查询a表中chengji大于等于60的所有行,并按降序显示name列;默认为ASC升序


2``模糊查询
2.1【使用like进行模糊查询】
注意:like运算副只用于字符串,所以仅与char和varchar数据类型联合使用
例:select * from a where name like ‘赵%‘
说明:查询显示表a中,name字段第一个字为赵的记录

2.2【使用between在某个范围内进行查询】
例:select * from a where nianling between 18 and 20
说明:查询显示表a中nianling在18到20之间的记录

2.3【使用in在列举值内进行查询】
例:select name from a where address in (‘北京‘,‘上海‘,‘唐山‘)
说明:查询表a中address值为北京或者上海或者唐山的记录,显示name字段


3``.分组查询
3.1【使用group by进行分组查询】
例:select studentID as 学员编号,AVG(score) as 平均成绩 (注释:这里的score是列名)
from score (注释:这里的score是表名)
group by studentID
说明:在表score中查询,按strdentID字段分组,显示strdentID字段和score字段的平均值;select语句中只允许被分组的列和为每个分组返回的一个值的表达式,例如用一个列名作为参数的聚合函数

3.2【使用having子句进行分组筛选】
例:select studentID as 学员编号,AVG(score) as 平均成绩 (注释:这里的score是列名)
from score (注释:这里的score是表名)
group by studentID
having count(score)>1
说明:接上面例子,显示分组后count(score)>1的行,由于where只能在没有分组时使用,分组后只能使用having来限制条件。


4``.多表联接查询

4.1内联接

4.1.1【在where子句中指定联接条件】
例:select a.name,b.chengji
from a,b
where a.name=b.name
说明:查询表a和表b中name字段相等的记录,并显示表a中的name字段和表b中的chengji字段

4.1.2【在from子句中使用join…on】
例:select a.name,b.chengji
from a inner join b
on (a.name=b.name)
说明:同上


4.2外联接

4.4.2.1【左外联接查询】
例:select s.name,c.courseID,c.score
from strdents as s
left outer join score as c
on s.scode=c.strdentID
说明:在strdents表和score表中查询满足on条件的行,条件为score表的strdentID与strdents表中的sconde相同

4.2.2【右外联接查询】
例:select s.name,c.courseID,c.score
from strdents as s
right outer join score as c
on s.scode=c.strdentID
说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的sconde与score表的strdentID相同

 

            ----此文章借鉴https://www.cnblogs.com/daxueshan/p/6687521.html










































































以上是关于SQLServer视图用insert into插入,报错!!的主要内容,如果未能解决你的问题,请参考以下文章

使用 INSERT INTO (SQL Server 2005) 插入多个值

sql server 2012中插入记录INSERT后面+INTO与不+之间有啥区别?

SQL插入语句

SQLServer

insert into values 插入多条指定记录 - sql server 2008新功能

Insert into Select 没有正确插入相同的数据顺序