插入数据

使用Insert Into 插入

  1. if(exists(select * from sys.databases where name = 'webDB'))
  2. drop database webDB
  3. go
  4. --创建数据库
  5. create database webDB on primary
  6. (
  7. name = 'webDB',
  8. filename='d:\webDB.mdf',
  9. size = 5mb,
  10. maxsize=unlimited,
  11. filegrowth=10%
  12. )
  13. log on
  14. (
  15. name = 'webDB_log',
  16. filename = 'd:\webDB.ldf',
  17. size=3mb,
  18. maxsize=50mb,
  19. filegrowth=2mb
  20. )
  21.  
  22. use webDB
  23. go
  24. --创建表
  25. create table student(
  26. id int identity(1,1) primary key,
  27. name varchar(20) not null,
  28. sex char(2) not null,
  29. age int
  30. )
  31.  
  32. --使用Insert Into 插入一行数据
  33. insert into student (name,sex,age) values ('白大伟','男',26)
  34. --id为标识列 自动增长 无需为其添加值
  35.  
  36. --插入某个列
  37. insert into student (name,sex) values ('魏力夫','妖')
  38.  
  39. --如果插入全部列,可以不用写列名
  40. insert into student values ('李东','男',37)

插入标识列Set Identity_Insert

  1. --如果需要在标识列中插入一个值,可以使用Set Identity_Insert语句,但注意 主键不可重复!
  2. set Identity_Insert student on --设置允许插入标识列
  3. insert into student (id,name,sex,age) values (4,'梁不贱','男',24)
  4. set Identity_Insert student off --插入后 关闭

使用Insert Into 插入多行数据

  1. --使用Insert Into 插入多行数据,使用逗号分割
  2. insert into student (name,sex,age) values
  3. ('张三','男',18),
  4. ('李四','女',19),
  5. ('王五','女',20)

使用Select语句插入

  1. --使用Select 语句可以将现有表中的多行数据插入到目标表中
  2. insert into student (name,sex,age) select Sname,Ssex,Sage from oldTable

使用Select Into插入

  1. --使用Select Into 插入数据
  2. --该方法其实是创建了一张新表,然后由select语句将所有行添加到新创建的表中。
  3. select id,name,sex,age
  4. into newTable
  5. from student
  6. --这种方式创建的表,没有主键,索引,以及约束,并且表列的长度也会发生变化。不适合创建永久表

更新数据

使用Update语句更新数据

  1. --需要注意的是,如果不限制范围,则整表都会更新
  2. update student set name='王大锤' where id = 3

引用多表更新数据

  1. --有时会需要引用另外的表,用来限制更新记录
  2. create table [user]
  3. (
  4. userID int identity(1,1) primary key,
  5. userName varchar(30) not null,
  6. passWord varchar(30) not null,
  7. RoleId int not null
  8. )
  9. create table [role]
  10. (
  11. roleId int identity(1,1) primary key,
  12. roleName varchar(30) not null,
  13. roleContent varchar(50) not null
  14. )
  15. insert into [user] values ('admin','admin',1),('editor','editor',2),('system','system',3)
  16. insert into [role] values ('管理员','网站管理员'),('编辑','网站编辑'),('系统','系统管理员')
  17.  
  18. update [role] set roleContent = '只有user表中的用户名类似adm才会修改'
  19. from Role r
  20. inner join [user] u
  21. on r.roleId = u.RoleId
  22. where u.userName like 'adm%' --如果没有这个限制条件 则整表都更新
  23.  
  24. select * from [role]

删除数据

使用Delete删除

  1. --如果不限制条件则整表都会被删除。
  2. delete from student where id = 1

引用多表删除数据

  1. --先删除user表中的admin
  2. delete from [user] where userName = 'Admin'
  3.  
  4. delete from [role]
  5. from [role] r
  6. left outer join [user] u
  7. on r.roleId = u.userID
  8. where u.RoleId is null --删除权限表中未被user表中引用的数据,管理员被删除
  9.  
  10. select * from [role]

使用truncate删除所有行

  1. truncate table oldTable
  2. --truncate 会删除所有行,无法指定范围.

合并数据

Merge 语句是一个多种功能的混合语句,在一个查询中可以完成Insert、Update、Delete等功能。

根据与源表联接的结果,对目标表执行插入、更新或删除操作。源表中包含即将被添加(或更新)到目标表中的数据行,而目标表接受插入(或更新)操作,可以对两个表进行同步操作。

SQL Server 2008之前的版本中是没有的,所以以前都是先删掉再添加,或写一些分支条件判断存在否 再insert 或update。

  1. --创建源表
  2. create table sourceTable(
  3. id int,
  4. content varchar(30)
  5. )
  6.  
  7. --创建目标表
  8. create table targetTable(
  9. id int,
  10. content varchar(30)
  11. )
  12.  
  13. --插入测试数据
  14. insert into sourceTable values (1,'S001'),(2,'S002'),(3,'S003'),(4,'S004'),(5,'S005')
  15. insert into targetTable values (1,'target001'),(2,'target002'),(6,'target006'),(7,'target007')
  16.  
  17. select * from sourceTable
  18. --源表
  19. --1 S001
  20. --2 S002
  21. --3 S003
  22. --4 S004
  23. --5 S005
  24. select * from targetTable
  25. --目标表
  26. --1 target001
  27. --2 target002
  28. --6 target006
  29. --7 target007
  30.  
  31. --编写merge语句
  32. merge into targetTable t --目标表
  33. using sourceTable s --源表
  34. on t.id = s.id --类似join 完成两表之间的匹配
  35. when matched --如果两表中有值被匹配,更新
  36. then update set t.content = s.content
  37. when not matched --如果没有匹配结果,插入
  38. then insert values(s.id,s.content)
  39. when not matched by source --目标表中存在但源表中不存在,删除
  40. then delete;
  41.  
  42. --再次查询,则两表同步

返回输出的数据

OUTPUT 子句可以把受影响的数据行返回给执行请求的任何接口,并且可以插入到一张表中。

OUTPUT子句可以引用inserted或deleted虚拟表,取决于需要修改前(deleted)或修改后(inserted)的数据。

输出insert语句的执行结果

  1. insert into student
  2. output inserted.id,inserted.name,inserted.sex,inserted.age --inserted.* 所有
  3. select '哈哈','女',24
  4. --返回insert语句插入的记录,对于查找服务器生成的值并返回给应用程序是很有用的。

输出update语句的执行结果

  1. update student set name='张振'
  2. output deleted.name as oldName,inserted.name as updateValue
  3. where id = 4
  4. --返回修改之前的名字 和修改之后的名字
  5. --可以用来追踪对数据库的删除操作

将OUTPUT结果插入一张表中

  1. --创建审计表
  2. create table db_Audit
  3. (
  4. id int not null,
  5. name varchar(50) not null,
  6. sex varchar(50) not null,
  7. age int,
  8. deleteDate datetime not null
  9. constraint DF_deleteDate_TOday default(getdate()) --默认约束 当前时间
  10. )
  11.  
  12. delete from student
  13. output deleted.id,deleted.name,deleted.sex,deleted.age
  14. into db_Audit(id,name,sex,age)
  15. where id <10 -- id小于10的全部删除并插入到审计表中
  16.  
  17. select * from db_Audit

Merge通过output子句,可以将刚刚做过变动的数据进行输出。

  1. merge into targetTable t --目标表
  2. using sourceTable s --源表
  3. on t.id = s.id --类似join 完成两表之间的匹配
  4. when matched --如果两表中有值被匹配,更新
  5. then update set t.content = s.content
  6. when not matched --如果没有匹配结果,插入
  7. then insert values(s.id,s.content)
  8. when not matched by source --目标表中存在但源表中不存在,删除
  9. then delete
  10. output $action as action,inserted.id as 插入的id,
  11. inserted.content as 插入的内容,
  12. deleted.id as 删除的id,
  13. deleted.content as 删除的内容;

9、SQL Server 操作数据的更多相关文章

  1. 009.Working with SQL Server LocalDB --【在sql server localdb 上操作数据】

    Working with SQL Server LocalDB 在sql server localdb 上操作数据 2017-3-7 2 分钟阅读时长 本文内容 1.SQL Server Expres ...

  2. 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期

    腾讯云图片鉴黄集成到C#   官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...

  3. sql server 2008 操作数据表

    SQL Server表   表的类型:   ①临时表 临时表可用来处理中间数据或者用临时表 与其它连接共享进行中的工作.临时表只 能放在tempdb中. 私有临时表(#) 全局临时表(##)   ②系 ...

  4. sql server 日志文件结构及误操作数据找回

    一. 概述 在sql server 里有数据文件.mdf和日志文件.ldf,日志文件是sqlserver数据库的另一个重要组成部分,日志文件记录了所有事务以及每个事务对数据库所做的修改.为了提高数据库 ...

  5. SQL Server游标(转)

    清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...

  6. SQL语句操作数据与一些函数使用的丰富数据库

    数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...

  7. 数据库(SQL Server)管理数据库表~新奇之处

    说到“数据库”,我总有一种莫名的感觉,在刚刚接触到的数据库中就让我似懂非懂渡过着,于是思考着.于是在冷静的时空中让我回想到了很多的知识,不知你们是怎样过来的,真心希望我的这篇数据库总结能够让我们都有一 ...

  8. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

  9. SQL Server游标

    什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...

随机推荐

  1. Eclipse中将Java项目转换成Web项目的方法

    前言: 用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个java工程,将无法在Tomcat中进行部署运行. 方法: 1.找到.project文件,找到里面的<n ...

  2. 触发器事件trigger

    修改mysql结束符   delimiter name 触发器语法:     create trigger 触发器名称       after/before  触发时间     //错误  ERROR ...

  3. 使用异步I/O大大提高应用程序的性能

    转自:https://www.ibm.com/developerworks/cn/linux/l-async/ AIO简介 Linux中最常见的输入输出(I/O)模型是同步I/O.在这个模型中,当请求 ...

  4. Apache Tomcat 7 安装与配置

    下载 首先需要下载tomcat7的安装文件,地址如下: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomca ...

  5. 【python】遍历类的所有成员

    # -*- coding: utf-8 -*- #sharejs.com提供代码,转载请注明出处 class Site(object): def __init__(self): self.title ...

  6. 交换ctrl和caps_loack的新方法

    交换ctrl和caps_loack的新方法 Table of Contents 1 过程 1 过程 debian用了几年,由于emacs的关系,一直将右ctrl和caps_lock键交换,使用的是xm ...

  7. mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案

    微信小程序概念的提出,绝对可以算得上中国IT界惊天动地的一件大事,这可能意味着一场新的开发热潮即将到来, 我也怀着激动的心情准备全身心投入其中,不过截止目前,在官方网站上下载的最新版本都无法使用,打开 ...

  8. 好莱坞电影公司&系列电影

    - 好莱坞6大发行公司: - Warner Bros(WB): <哈利·波特>, 黑客帝国, 蝙蝠侠, - New Line cinema新线(2008): 魔戒, 霍比特人, 尖峰时刻, ...

  9. DHTMLX-Windows

    DHTMLX-Windows dhtmlxWindows窗口,允许用户使用几个窗户并允许windows重叠,并提供对用户执行标准操作,比如移动/调整窗口大小,发送窗口的前景/背景,最小化/最大化一个窗 ...

  10. WindowsFormsHost使用问题

    WindowsFormsHost使用问题 WPF WindowsFormsHost 类 允许在 WPF 页面上承载 Windows Forms控件的元素. 命名空间:  System.Windows. ...