数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑。

  select into

  经常遇到一种情况是,我们希望创建一个新表,表中的数据来源于原有的一个表;原有一个表,但是这个表中的数据已经很混乱,我们希望把这些数据备份出来,然后把原有的表中的数据清除,重新导入;在这些情况下我们可以使用select into语句。

  如果当前用户拥有建表权限,在select语句使用关键字into可以在数据库中创建新的 表。这个语句只需要把into new_table_name加到选择出的列名之后,from关键字之前,当然数据可以来源于一个或多个表中。需要说明的是在新表中只包含select字 句中查询的到的数据,没有任何键,约束,关系。下面实例:

  1. select top(10) *
  2. into new_intervalwaitssample
  3. from IntervalWaitsSample
  4. select * from new_intervalwaitssample

  这个语句就将IntervalWaitsSample表中的前10行数据放在一个新建的表new_intervalwaitssample中。  

  insert into select

  现在已经有这个新表了,如果我们想再从原表IntervalWaitsSample中选择一些数据插入到这个新表中呢,这时候就需要使用insert into select语句了,下面实例:

  1. insert into new_intervalwaitssample
  2. select * from IntervalWaitsSample where wait_type='ASSEMBLY_LOAD'

  这个语句就将原表IntervalWaitsSample中的所有wait_type='ASSEMBLY_LOAD'的数据插入到新表中了。

  insert into select union

  现在如果我们有一些已知的数据,想把这些数据一次性写入到目标表里面,应该怎么办呢,这时候union语句就很有用了,可以使用insert
into select union语句,注意这个语句和insert into
select很相似,差别就在于后面的select语句使用了union把多个select连接起来。

  1. insert into select value11 , value12 , value13
  2. union select value21 , value22 , value23
  3. union select value31 , value32 , value33

  下面是实例:

  1. insert into new_intervalwaitssample
  2. select 'ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00' union
  3. select 'ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00' union
  4. select 'ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00' union
  5. select 'ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00'

  使用表值构造函数

  我们还可以直接使用表值构造函数,这个更加简单直接,代码如下:

  1. insert into new_intervalwaitssample
  2. values
  3. ('ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00'),
  4. ('ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00'),
  5. ('ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00'),
  6. ('ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00')

  从表中剪切数据

  还有一种情况,假设我们想从一个表中的数据删除几条数据,然后把这些删除的数据放到另外一个表中。这个动作就像使用剪切,粘贴一样。不过这种情况要注意,他只能从用户表中剪切数据,不能从视图中剪切数据。它的语法如下

  1. Delete sourcetable
  2. output deleted.value1,deleted.value2,deleted.value3
  3. into targettable
  4. from targettable where

  下面是实例

  1. delete WaitStats
  2. output
  3. deleted.dt,
  4. deleted.wait_type,
  5. deleted.waiting_tasks_count,
  6. deleted.wait_time_ms,
  7. deleted.max_wait_time_ms,
  8. deleted.signal_wait_time_ms
  9. into new_waitestats
  10. where WaitStats.wait_type='ABR'

  要注意的是这里有一个很少见的关键字deleted,它是当前要删除的表的别名,这个有点像类中的this关键字。

  可见即可得的编辑

  如果我们是应用程序开发,我相信大多数人还是更愿意使用SQL Server Management
Studio中的图像化界面来操作数据,毕竟提供了这么多强大的功能,为什么不用呢。记得我曾经提到过Oracle中可以直接修改sql语句选择得到的数
据,当时质问Microsoft SQL Server为何没有提供这样强大的功能。呵呵,今天发现SQL
Server还是提供了这样的功能。不过这种修改只能是单独一个表,如果在这个查询语句中有内连接之类的估计就不行了。废话不说,上图:

  1. 点击要修改的表右击选择Edit top 200 rows
  2. 当打开编辑界面的时候,SQL server上面会多出一个标签 ,鼠标滑到这个标签上,再滑到Panel上,再滑到SQL上,点击SQL,或者在编辑界面右击也能看到。如图1

    这时候在上面的文字区就可以编写自己想要修改的数据的查询语句如下列:
    1. SELECT TOP (1000) dt, wait_type, waiting_tasks_count, wait_time_ms, max_wait_time_ms, signal_wait_time_ms
    2. FROM new_waitestats
    3. WHERE (wait_type ='ABR')
  3. 这里我们想要修改wait_type=ABR的数据,点击查询按钮 ,在下面的表格内就可以看到所有符合条件的数据,这时候就可以修改这些数据了,注意改好之后按回车键才会写到数据库里面。这样做是不是很偷懒呢呵呵,不用写update语句,直接在里面修改。

  使用编辑器复制粘贴数据

  还有一种情况可以使用编辑器代替上面的insert into select语句, 如果两个表的字段完全一样,我们从一个表中查询得到数据,然后复制到另外一个表中。

  1. 首先点击数据行的开头,选中整行,然后点击copy如图2
  2. 然后右击想要插入数据的第二个表,鼠标拖动滚动条到最后,直到显示一行全部都是空值的一行,然后右击paste,按回车键,这样一条数据就插入进去了。如图3

  这些都是在平时工作中见到的,觉得很有意思在这里记录下来。这些雕虫小技对于数据库技术大牛来时不值得一提,还望大牛们看到了不要笑我班门弄斧啊。

SQL点滴之编辑数据(转)的更多相关文章

  1. SQL点滴14—编辑数据

    原文:SQL点滴14-编辑数据 数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑. select into 经常遇到一种情况是,我们希望创建一个新表,表中的数据来源 ...

  2. SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息

    原文:SQL点滴4-筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息 项目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确.我们 ...

  3. SQL点滴18—SqlServer中的merge操作,相当地风骚

    原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...

  4. 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理

    [转]PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理 只要有人用了: select t.* from ...

  5. sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

    原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server ...

  6. sql点滴40—mysql乱码问题总结

    原文:sql点滴40-mysql乱码问题总结 本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题.一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多. MySQL默 ...

  7. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. SQL SERVER几种数据迁移/导出导入的实践

    SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据 ...

  9. ASP.NET用SQL Server中的数据来生成JSON字符串

    原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本 ...

随机推荐

  1. POJ 2240 Arbitrage(floyd)

    http://poj.org/problem?id=2240 题意 : 好吧,又是一个换钱的题:套利是利用货币汇率的差异进行的货币转换,例如用1美元购买0.5英镑,1英镑可以购买10法郎,一法郎可以购 ...

  2. Genymotion加载so出错解决方案

    通过网上所搜得出结论: Genymotion是x86的架构,而我们的so库是arm架构的 解决:安装Genymotion-ARM-Translation.zip 1.下载:http://pan.bai ...

  3. P1005 采药

    P1005 采药 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005复赛普及组第三题 描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的 ...

  4. 关于fisher判别的一点理解

    最近一个朋友问这方面的一些问题,其实之前也就很粗略的看了下fisher,真正帮别人解答问题的时候才知道原来自己也有很多东西不懂.下面小结下自己对fisher判别的理解: 其实fisher和PCA差不多 ...

  5. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  6. Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片

    一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...

  7. NPOI操作EXCEL----------NPOI基础01

    来源地址:http://www.cnblogs.com/csqb-511612371/p/4878059.html 先来介绍一下NPOI基本的东西: 1.下载地址:http://npoi.codepl ...

  8. Visual Studio Support (DDEX)

    原文 VS2012,VS2013,and VS2015Pro+NpgsqlDdexProvider+EFv6 how to(by @kenjiuno) Reference: #213 Overview ...

  9. HotSwap和JRebel原理

    HotSwap和JRebel原理 HotSwap和Instrumentation 在2002年的时候,Sun在Java 1.4的JVM中引入了一种新的被称作HotSwap的实验性技术,这一技术被合成到 ...

  10. java调用phantomjs采集ajax加载生成的网页

    java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应 ...