SQL点滴14—编辑数据

原文:SQL点滴14—编辑数据

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

  

select into

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

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

select top(10) *into new_intervalwaitssamplefrom IntervalWaitsSampleselect * from new_intervalwaitssample

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

  

insert into select

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

insert into new_intervalwaitssampleselect * 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连接起来。

insert into select value11 , value12 , value13 

union select value21 , value22 , value23 

union select  value31 , value32 , value33 

… …

下面是实例:

insert into new_intervalwaitssampleselect ‘ASYNC_NETWORK_IO‘,‘2011-05-09 16:50:00.973‘,‘0.00‘ unionselect ‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:00:00.020‘,‘0.00‘ unionselect ‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:15:00.123‘,‘0.00‘ unionselect ‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:25:00.190‘,‘0.00‘

  

使用表值构造函数

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

insert into new_intervalwaitssamplevalues (‘ASYNC_NETWORK_IO‘,‘2011-05-09 16:50:00.973‘,‘0.00‘),(‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:00:00.020‘,‘0.00‘),(‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:15:00.123‘,‘0.00‘),(‘ASYNC_NETWORK_IO‘,‘2011-05-09 17:25:00.190‘,‘0.00‘)

  

从表中“剪切”数据

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

Delete sourcetableoutput deleted.value1,deleted.value2,deleted.value3into targettablefrom targettable where … …

下面是实例

delete WaitStatsoutput deleted.dt,deleted.wait_type,deleted.waiting_tasks_count,deleted.wait_time_ms,deleted.max_wait_time_ms,deleted.signal_wait_time_msinto new_waitestatswhere 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_msFROM         new_waitestatsWHERE     (wait_type = ‘ABR‘)
    
  3. 这里我们想要修改wait_type=’ABR’的数据,点击查询按钮 ,在下面的表格内就可以看到所有符合条件的数据,这时候就可以修改这些数据了,注意改好之后按回车键才会写到数据库里面。这样做是不是很偷懒呢呵呵,不用写update语句,直接在里面修改。

  

使用编辑器复制粘贴数据

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

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

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

时间: 2024-10-06 02:29:01

SQL点滴14—编辑数据的相关文章

SQL 点滴:附加数据失败

今天用SQL Server 2008的attach功能附加一个数据库,出了点问题,提示的错误是: Unable to open physical file "D:\Documents\Dalt\XXXX.mdf" Operating system error 5: "5(error not found)" (Microsoft SQL Server: Error 5120)". 解决办法:以管理员身份加载SQL,就行了

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

原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的.本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语

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

原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server 2008中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本. 步骤: 右击需要导出数据的数据库,在弹出式菜单中选择“任务”下的“生成脚本”选项 在第二步选择“高级选项”如果不是2008(R2)的选择 "编写数据的脚本"选择为TRUE,这里默认是为FALSE的 , 是200

SQl Server误编辑删除数据,操作撤回

SQl Server误编辑删除数据,操作撤回 操作撤回 select?*?into?..?遇到大表咋办? 建议用? begin?tran ??update?...??--更新 ??select?...??--确认 ? ? commit?tran?--提交 或 rollback?tran?--回滚

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

原文:sql点滴40-mysql乱码问题总结 本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题.一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多. MySQL默认编码是latin1 1. mysql> show variables like 'character%'; 2. +--------------------------+--------------------------+ 3. | Variable_name | Value | 4. +---

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

SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据库客户端(SSMS)的界面工具.右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可.而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等.当然在可以在向导进行修改.需要注意的是如果标题不是

十步优化SQL Server中的数据访问(转载)

原文地址:http://tech.it168.com/a2009/1125/814/000000814758.shtml 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因. 经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表

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

原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本上都是JSON格式的,要和ASP.NET结合开发,需要格式化数据成JSON的东西.所以作者实现了一个生成JSON字符串的方法. 最近在学习ExtJs与ASP.NET结合开发,前者用到的数据内容基本上都是JSON格式,遂想写一个格式化数据成JSON的东东,在网上找了一下,发现还蛮多的,实现了一个类似于

SQL点滴27—性能分析之执行计划

原文:SQL点滴27-性能分析之执行计划 一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存