前言
在进行下面的操作前,先在数据库中新建两张数据表:
(以下是创建数据表的代码)
1 2 3 4 5 6 7 8 9 10 11 | create table 学生表01( 姓名 nvarchar(10), 性别 nvarchar(1), 身高 numeric (3,2) ) create table 学生表02( 姓名 nvarchar(10), 性别 nvarchar(1), 身高 numeric (3,2) ) |
1、插入完整的行
1.1、基本的insert语法(语法简单,并不安全)
把数据插入表中最简单的方法是使用基本的insert语法:
1 2 | insert into 学生表01 values ( '李明' , '男' , '1.70' ) |
将上述语句执行后,使用select语句即可看到结果
1 | select * from 学生表01 |
图片:
该方法将存储到表的每一列数据在values子句中给出,必须每列提供一个值。如果某列没有值应该使用NULL值(假定表允许对该列使用空值)
例如:
1 2 | insert into 学生表01 values ( '李红' , null , '1.69' ) |
将数据插入后对该表进行查询可得:
各列必须以他们在表定义中出现的次序填充。该方法应尽量避免使用。
注意:
在某些sql实现中,跟在insert之后的into是可选的。但是,即使不一定需要,最好还是提供这个关键字,保证sql代码在DBMS之间的可移植性
1.2、更安全的insert语法
更安全的写法如下
1 2 | insert into 学生表01(姓名,性别,身高) values ( '李亮' , '女' , '1.60' ) |
执行以上代码后,查询表可得结果:
该语句与前面的insert语句工作完全相同,但是在表名后的括号里明确给出了列名。
在插入行时,DBMS将用values列表中的相应值填入列表的对应项中。因为提供了列名,
values必须以指定的次序匹配指定的列名,不一定按照各列出现在表中的实际顺序
示例:
1 2 | insert into 学生表01(性别,姓名,身高) values ( '女' , '小红' , '1.55' ) |
执行以上代码后,查询表可得结果:
使用该方法,即使表的结构发生变化,这条insert语句依然能正确工作
2、插入部分行
使用更安全的insert写法是明确给出表的列名。使用这种语法,还可以省略列。
示例:
1 2 | insert into 学生表01(性别,姓名) values ( '女' , '大红' ) |
执行以上代码后,查询表可得结果:
在以上示例语句中,没有给身高提供值,依然插入成功了,只是在没有提供值得地方显示null
注意:
省略的列必须满足以下某个条件:
1、该列定义为允许NULL值(无值或空值)
2、在表定义中给出默认值。这表示如果不给出值,将使用默认值。
如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误消
息,相应的行不能插入成功。
3、插入检索出的数据
insert可以将select语句的结果插入表中
示例:
1 2 3 | insert into 学生表02(性别,姓名,身高) select 性别,姓名,身高 from 学生表01 |
执行以上代码后,使用查询语句:
1 | select * from 学生表02 |
得到结果如下:
该例子使用inset select 从学生表01中将所有数据导入学生表02。
select 语句从学生表01检索出要插入的数据,而不是列出他们。
select中列出的每一列对应学生表02表名后所跟的每一列。
insert select中select语句可以包含where子句,以过滤插入的数据。
4、从一个表复制到另一个表
1 | select * into 学生表 from 学生表01 |
执行以上代码后,使用查询语句:
1 | select * from 学生表 |
得到结果如下:
要想只复制部分列,可以明确给出列名,而不是使用*通配符。
示例:
1 | select 姓名 into 学生表03 from 学生表01 |
执行以上代码后,使用查询语句:
1 | select * from 学生表03 |
得到结果如下:
5、全部代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | create table 学生表01( 姓名 nvarchar(10), 性别 nvarchar(1), 身高 numeric (3,2) ) create table 学生表02( 姓名 nvarchar(10), 性别 nvarchar(1), 身高 numeric (3,2) ) select * from 学生表01 insert into 学生表01 values ( '李明' , '男' , '1.70' ) insert into 学生表01 values ( '李红' , null , '1.69' ) insert into 学生表01(姓名,性别,身高) values ( '李亮' , '女' , '1.60' ) insert into 学生表01(性别,姓名,身高) values ( '女' , '小红' , '1.55' ) insert into 学生表01(性别,姓名) values ( '女' , '大红' ) insert into 学生表02(性别,姓名,身高) select 性别,姓名,身高 from 学生表01 select * from 学生表02 select * into 学生表 from 学生表01 select * from 学生表 select 姓名 into 学生表03 from 学生表01 select * from 学生表03 |
补充知识:SQL SERVER 循环批量插入数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DECLARE @ Count INT ; DECLARE @BuildingId VARCHAR (16); DECLARE @FloorId VARCHAR (16); DECLARE @RoomId VARCHAR (16); DECLARE @RoomName NVARCHAR(20); DECLARE @ Name NVARCHAR(20); BEGIN SET @ Count = 1; SET @BuildingId = '0000000000000999' ; SET @FloorId = '0000000000000999' ; SET @RoomId = '0000000000009999' ; SET @RoomName = N '999' ; SET @ Name = N '999' ; WHILE @ Count |
总结
到此这篇关于SQL Server如何插入数据的文章就介绍到这了,更多相关SQL Server插入数据内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!