SQL Server如何插入数据示例代码

目录
  • 前言
  • 1、插入完整的行
    • 1.1、基本的insert语法(语法简单,并不安全)
    • 1.2、更安全的insert语法
  • 2、插入部分行
  • 3、插入检索出的数据
  • 4、从一个表复制到另一个表
  • 5、全部代码
  • 补充知识:SQL SERVER 循环批量插入数据
  • 总结

前言

在进行下面的操作前,先在数据库中新建两张数据表:

(以下是创建数据表的代码)

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语法:

insert into 学生表01
values('李明','男','1.70')

将上述语句执行后,使用select语句即可看到结果

select *from 学生表01

图片:

该方法将存储到表的每一列数据在values子句中给出,必须每列提供一个值。如果某列没有值应该使用NULL值(假定表允许对该列使用空值)

例如:

insert into 学生表01
values('李红',null,'1.69')

将数据插入后对该表进行查询可得:

各列必须以他们在表定义中出现的次序填充。该方法应尽量避免使用。

注意:

在某些sql实现中,跟在insert之后的into是可选的。但是,即使不一定需要,最好还是提供这个关键字,保证sql代码在DBMS之间的可移植性

1.2、更安全的insert语法

更安全的写法如下

insert into 学生表01(姓名,性别,身高)
values('李亮','女','1.60')

执行以上代码后,查询表可得结果:

该语句与前面的insert语句工作完全相同,但是在表名后的括号里明确给出了列名。

在插入行时,DBMS将用values列表中的相应值填入列表的对应项中。因为提供了列名,

values必须以指定的次序匹配指定的列名,不一定按照各列出现在表中的实际顺序

示例:

insert into 学生表01(性别,姓名,身高)
values('女','小红','1.55')

执行以上代码后,查询表可得结果:

使用该方法,即使表的结构发生变化,这条insert语句依然能正确工作

2、插入部分行

使用更安全的insert写法是明确给出表的列名。使用这种语法,还可以省略列。

示例:

insert into 学生表01(性别,姓名)
values('女','大红')

执行以上代码后,查询表可得结果:

在以上示例语句中,没有给身高提供值,依然插入成功了,只是在没有提供值得地方显示null

注意:

省略的列必须满足以下某个条件:
1、该列定义为允许NULL值(无值或空值)
2、在表定义中给出默认值。这表示如果不给出值,将使用默认值。

如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误消

息,相应的行不能插入成功。

3、插入检索出的数据

insert可以将select语句的结果插入表中

示例:

insert into 学生表02(性别,姓名,身高)
select 性别,姓名,身高
from 学生表01

执行以上代码后,使用查询语句:

select *from 学生表02

得到结果如下:

该例子使用inset select 从学生表01中将所有数据导入学生表02。

select 语句从学生表01检索出要插入的数据,而不是列出他们。

select中列出的每一列对应学生表02表名后所跟的每一列。

insert select中select语句可以包含where子句,以过滤插入的数据。

4、从一个表复制到另一个表

select *into 学生表 from 学生表01

执行以上代码后,使用查询语句:

select *from 学生表

得到结果如下:

要想只复制部分列,可以明确给出列名,而不是使用*通配符。

示例:

select 姓名 into 学生表03 from 学生表01

执行以上代码后,使用查询语句:

select *from 学生表03

得到结果如下:

5、全部代码

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 循环批量插入数据

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 <= 180
    BEGIN
        INSERT INTO dbo.Xq_Bed
        (
            Id,
            BuildingId,
            FloorId,
            RoomId,
            RoomName,
            Name,
            Status,
            CreateTime,
            IsDeleted
        )
        VALUES
        (NEWID(), @BuildingId, @FloorId, @RoomId, @RoomName, @Name + '-' + CAST(@Count AS VARCHAR), 99, SYSDATETIME(),
         0  );
        SET @Count = @Count + 1;
    END;
END;

总结

到此这篇关于SQL Server如何插入数据的文章就介绍到这了,更多相关SQL Server插入数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQLServer批量插入数据的三种方式及性能对比

    昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文. 公司技术背景:数据库访问类(xxx.DataBase.Dll)调用存储过程实现数据库的访问. 技术方案一: 压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入.很明显,这种方式效率并不高,于是有了前面的两位同事讨论效率低的问题. 技术方案二: 由于是考虑到大数据量的批量

  • SQL Server 批量插入数据的完美解决方案

    一.Sql Server插入方案介绍 关于 SqlServer 批量插入的方式,有三种比较常用的插入方式,Insert.BatchInsert.SqlBulkCopy,下面我们对比以下三种方案的速度 1.普通的Insert插入方法 public static void Insert(IEnumerable<Person> persons) { using (var con = new SqlConnection("Server=.;Database=DemoDataBase;User

  • SQLServer 批量插入数据的两种方法

    运行下面的脚本,建立测试数据库和表值参数. 复制代码 代码如下: --Create DataBase create database BulkTestDB; go use BulkTestDB; go --Create Table Create table BulkTestTable( Id int primary key, UserName nvarchar(32), Pwd varchar(16)) go --Create Table Valued CREATE TYPE BulkUdt A

  • SQLServer用存储过程实现插入更新数据示例

    实现 1)有相同的数据,直接返回(返回值:0): 2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create proc Insert_Update @Id varchar(20), @Name varchar(20), @Telephone varchar(20), @Address varchar(20), @Job varchar(20), @returnValue int output as declar

  • SQL Server中数据行批量插入脚本的存储实现

    无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJECT_I

  • SQL Server如何插入数据示例代码

    目录 前言 1.插入完整的行 1.1.基本的insert语法(语法简单,并不安全) 1.2.更安全的insert语法 2.插入部分行 3.插入检索出的数据 4.从一个表复制到另一个表 5.全部代码 补充知识:SQL SERVER 循环批量插入数据 总结 前言 在进行下面的操作前,先在数据库中新建两张数据表: (以下是创建数据表的代码) create table 学生表01( 姓名 nvarchar(10), 性别 nvarchar(1), 身高 numeric(3,2) ) create tab

  • SQL Server批量插入数据案例详解

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters),高效插入数据. 新建数据库: --Create DataBase create database BulkTestDB; go use BulkTestDB; go --Create Table Create tab

  • spring中使用mybatis实现批量插入的示例代码

    有3种实现方式:foreach,spring事务,以及ExecutorType.BATCH. 1. foreach方式 这种方式实际是对SQL语句进行拼接,生成一个长长的SQL,对很多变量进行绑定.如果数据量不大(1000个以内),可以用这种方式.如果数据量太大,可能数据库会报错. 定义接口 public interface StudentMapper05 { public void insertStudent(List<Student> studentList); } 定义mapper 适用

  • Node.js连接Sql Server 2008及数据层封装详解

    本文实例讲述了Node.js连接Sql Server 2008及数据层封装.分享给大家供大家参考,具体如下: 最近需要学习Node.js,所以很久没写东西了,疯狂的看了很久的书.有关于Node.js的学习知识,可以参考官网教程WWW.NODEJS.ORG,或者书籍<Node.js权威指南>.这里我记录一下Node.js连接Sql Server 2008的步骤. Node.js连接数据库需要特定的模块msnodesql,这个模块需要特定的环境去生成才可以使用. 前期准备如下: 1.安装Node.

  • Mybatis Plus 实现批量插入的示例代码

    目录 一. 添加依赖 二. 继承默认方法注入 三. 在 MybatisPlusConfig 配置文件中注入 Bean 四. 扩展自带 BaseMapper 五. 业务层面实现 Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的: 居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食. 一. 添加依赖 <!--mybatis plus extension,包含了mybatis plus core--> <dependency&

  • SQL Server解析XML数据的方法详解

    本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

  • 恢复sql server 2000误删数据的解决办法

    今天不小心把客户那边的数据库中删了一千多条数据,而且之前又没有备份,真的是很郁闷,后来在网上找到一工具,用起来挺方便,让我躲过一劫. 首先来看一下界面: 输入服务器地址,用户名及密码后点Connect,进入到下面的界面: 在这里选择要恢复数据的数据库,选择Use On-line Log(如果你又备份文件的话就不需要用这个工具了,直接用SQL搞定了).然后点Attach,进入下面的界面: 可以看到左边菜单中有很多功能,我们要恢复数据,首先要查看日志,找出我们误操作的那些日志记录,点Browse下的

  • SQL Server数据库删除数据集中重复数据实例讲解

    SQL Server数据库操作中,有时对于表中的结果集,满足一定规则我们则认为是重复数据,而这些重复数据需要删除.如何删除呢?本文我们通过一个例子来加以说明. 例子如下: 如下只要companyName,invoiceNumber,customerNumber三者都相同,我们则认为是重复数据,下面的例子演示了如何删除. declare @InvoiceListMaster table ( ID int identity primary key , companyName Nchar(20), i

  • SQL Server简单实现数据的日报和月报功能

    本文实例讲述了SQL Server简单实现数据的日报和月报功能.分享给大家供大家参考,具体如下: --320, SQL SERVER 日报 --查询2009-01-01当天客户A1,A2,A3的订单数量 SELECT Cust_Name , CONVERT(CHAR(10), Order_Date, 120) Order_Date , SUM(Qty) Qty FROM Orders_Big WHERE 1=1 AND Cust_Name IN ('A1', 'A2', 'A3') AND Or

随机推荐