1.SQL:复制数据库某一个表到另一个数据库中

  SELECT * INTO 新表 FROM 旧表 (将旧表的结构和数据都复制到新表,不用事先创建新表)
  SELECT * INTO 新表 FROM 旧表 where 1=2(只复制结构不复制数据)
  INSERT INTO 新表 SELECT * FROM 旧表(在新表已经存在的情况下,将旧表数据插入新表)
2.将某一条记录排在第一位。
  order by(case processId when 273 then 0  else 1 end), newid()//按照processId的值来排列,当processId为273,排第一个,然后再按照随机数排列。
3.当数据库出现死锁,或者事务冲突,我们需要先把所以的进程杀死。可采用如下代码。
  
--杀死所有进程
USE master;
GO
DECLARE @SQL VARCHAR(3000);
SET @SQL = '';
SELECT @SQL = @SQL+'; KILL ' + RTRIM(SPID)
FROM [sys].[sysprocesses] AS sps
WHERE [sps].[dbid] = DB_ID('otctrade');
SET @SQL = SUBSTRING(@SQL, 2, LEN(@SQL));
EXEC(@SQL);
GO
ALTER DATABASE otctrade SET MULTI_USER;
GO

4.有时候我们需要将数据库设置为单用户,然后对一些难以解决的数据问题执行checktable方法,这时候数据库会帮助我们解决这些问题,解决完以后,需要设置为多用户,可以用下面的 语句。

use master
declare @databasename varchar(255)
set @databasename='otctrade'
exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态
dbcc checktable('[otctrade].[dbo].[PE_U_Article]',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('[otctrade].[dbo].[PE_U_Article]',REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态

5.当我们要查询符合一些某段时间差里面的记录,可以采用DATEDIFF(day,start_time,end_time)=7这样的表达式,其中day是查询条件,可以是day,hour,month,year等,第二个参数为起始时间,第三个参数为终止时间。

比如:select * from T where DATEDIFF(day,create_time,getdate())>1查询距离create_已经过去了1天以上的记录。

     select * from T where DATEDIFF(hour,create_time,getdate())=1 查询距离create_已经过去了1小时的记录

6.如果sql中的某个字符串中包含了',比如一个字符串叫做she' tea。由于在sql语句中'是一个特殊的符号,所以我们可以采用这样的方式来规避这种影响。即在引号前面在加一个引号,相当于转义。

select * from A where name='she''s tea'

7.递归查询

我们经常会需要做一些递归查询,多数是针对具有父子节点结构的数据。比如部门表,一个部门可能隶属其他部门,这样就会有一个父子节点结构。我们可以采用如下的语句来进行递归查询。

with temp_users as
(select * from department_info where superiors_department_id is null union all select A.* from department_info A,temp_users B where A.superiors_department_id=B.department_id)
select * from temp_users

上述语句就是一个典型的递归查询的sql语句,递归的逻辑在于第二行,首先select * from department_info where superiors_department_id is null这条语句是第一次递归的查询语句,它查出美元上级部门的部门(也就是顶级部门),而后的内联语句就是递归逻辑,每次都跟temp_users做内联,然后得到的记录结果再加到temp_users里面,最后我们得到的temp_users就是一个完整的且按顺序排列好的总结果集。然后第三条语句我们直接从这个结果集中取数据就好了。

上述例子是从父级往子级递归,我们也可以从子级往父级进行递归。只需要将上述sql语句做稍微的修改即可实现。

 with temp_users as
(select * from department_info where department_id=1 union all select A.* from department_info A,temp_users B where A.department_id=B.superiors_department_id)
select * from temp_users

相信看了代码很容易就明白了,上述语句的结果集为

8.按自定义的形式排序

有时候我们除了定义一个或者几个排序字段之外,还需要对一些特殊的记录按特定顺序来排列,比如,我想要按年龄降序排列,但是我又必须把名字叫做A的同学排在第一个,名字叫做B的同学排在第二个,然后才是按年龄的降序排列,这时候我们可以使用case when语句来实现。

 select commodity_class_id as topClassId,commodity_class_name  as topClassName,photo_src as photoSrc,app_photo_src as appPhotoSrc from T_Commodity_Class where is_del=0
and class_kind=1
and class_type=1
order by (case top_class_id when 4 then 1 when 285 then 2 when 286 then 3 when 287 then 4 else 5 end),priority1

注意看第4行代码,我们就能了解这个技能的用处了。

ms sql一些技巧的更多相关文章

  1. MS SQL Server数据库查询优化技巧

    [摘 要]本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用.查询条件以及数据表的设计等进行了阐述.中国论文网 http://www.xzbu.com/2/view- ...

  2. PCB MS SQL 排序应用---SQL相邻数据区间值求解

    其中一篇 博文中有写<PCB MS SQL 排序应用---相邻数据且相同合并处理>此篇有也应相用也同的技巧,实现相邻数据区间值求解 示例: 原数据:处理前 求出区间值:处理后 SQL 代码 ...

  3. SQL开发技巧(二)

    本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...

  4. MS SQL巡检系列——检查外键字段是否缺少索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  5. MS SQL巡检系列——检查重复索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  6. [MS SQL Server]SQL Server如何开启远程访问

    在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...

  7. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  8. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  9. MS SQL Server 数据库分离-SQL语句

    前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...

随机推荐

  1. C#配合利用XML文件构建反射表机制

    在设计程序时,无论是界面或是后台代码,我们通常都想留给用户一个较为简单的接口.而我在参与封装语音卡开发函数包的时候,发现各种语音卡的底层函数的接口都是各种整形变量标记值,使用起来极为不变.于是就理解了 ...

  2. HTTP-FLV直播初探

    目前几种视频流的简单对比: 协议 httpflv rtmp hls dash 传输方式 http流 tcp流 http http 视频封装格式 flv flv tag Ts文件 Mp4 3gp web ...

  3. mysql数据库第二弹

    mysql数据库针对表的操作 表记录的增删改查 1.增加一张表 插入记录之前必须得先有表结构! CREATE TABLE score( id int PRIMARY KEY auto_incremen ...

  4. EXTtreeGrid分页

    这个东西整了两天,关键在于要两个stroe,之所以要两个因为treestroe在分页的时候接受不了返回的总行数,不过有个问题就是第二页分页后显示在没有根节点的行层级显示不是那木明显: -------- ...

  5. 大神博客链接系列---C#SubSonic3.0搭建ORM

    一.C#框架 C#ORM框架: SubSonic3.0制作ORM--- http://www.cnblogs.com/EmptyFS/p/3659679.html

  6. ionic3中NavController类push setRoot相关问题解决

    今天在测试app的时候发现,登录页跳转到首页后,会加载两次数据.百思不得其解,查看了所有代码也没能发现问题.最终抱着尝试的态度,动了如下代码: if (suc) { //this.navCtrl.pu ...

  7. 使用map做数组与链表去重

    #include<iostream> #include<map> using namespace std; class node{ public: node():value() ...

  8. makefile 中=与:=的差别

    1."=" make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整个makefile中最后被指定的值.看例子: x = foo y = $(x) bar ...

  9. hdu 3829 Cat VS Dog 二分匹配 最大独立点集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题目大意: 给定N个猫,M个狗,P个小朋友,每个小朋友都有喜欢或者不喜欢的某猫或者某狗 管理员从 ...

  10. mysql 打开慢查询日志

    打开mysql的配置文件  my.ini或是my.cnf找到节点[mysqld]下添加下面这两行(默认可能不带这两行,直接手敲即可) [AppleScript] 纯文本查看 复制代码 ? 1 2 3 ...