ms sql一些技巧
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一些技巧的更多相关文章
- MS SQL Server数据库查询优化技巧
[摘 要]本文主要是对MS SQL Server数据库查询优化技巧进行了说明和分析,对索引使用.查询条件以及数据表的设计等进行了阐述.中国论文网 http://www.xzbu.com/2/view- ...
- PCB MS SQL 排序应用---SQL相邻数据区间值求解
其中一篇 博文中有写<PCB MS SQL 排序应用---相邻数据且相同合并处理>此篇有也应相用也同的技巧,实现相邻数据区间值求解 示例: 原数据:处理前 求出区间值:处理后 SQL 代码 ...
- SQL开发技巧(二)
本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...
- MS SQL巡检系列——检查外键字段是否缺少索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- MS SQL巡检系列——检查重复索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- [MS SQL Server]SQL Server如何开启远程访问
在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- MS SQL Server 数据库分离-SQL语句
前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...
随机推荐
- 二:Redis快速入门及应用
Redis的使用难吗?不难,Redis用好容易吗?不容易.Redis的使用虽然不难,但与业务结合的应用场景特别多.特别紧,用好并不容易.我们希望通过一篇文章及Demo,即可轻松.快速入门并学会应用. ...
- 用python画一朵玫瑰花
废话不多说,直接上代码 from turtle import * import time setup(600,800,0,0) speed(0) penup() seth(90) fd(340) se ...
- linux下expect命令实现批量ssh免密
有时候我们需要批量发送ssh命令给服务器,但是有可能有些服务器是新加入的,还没有配置ssh免密,这个时候就会提示我们输入yes/no 或者password等,expect脚本命令就是用于在提示这些的时 ...
- JQuery之事件冒泡
JQuery 提供了两种方式来阻止事件冒泡. 方法一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...
- Vue-Access-Control:前端用户权限控制解决方案
原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...
- webuploader 实现图片批量上传
1.导入资源 2.JSP代码 <div class="page-container"> <div class="row cl"> < ...
- 揭秘 HashMap 实现原理(Java 8)
HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了.从基本的使用角度来说,它很简单,但从其内部的实现来看(尤其是 Java 8 的改进以来), ...
- idea—— 模版配置
修改File Header: /** * @author: ${USER} Date: ${DATE} Time: ${TIME} */ 新增Package Header: /* * Copyrigh ...
- TCP/IP 协议栈 -- 编写UDP客户端注意细节
上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server: #include <stdio.h> #include < ...
- springboot mybatis redis 二级缓存
前言 什么是mybatis二级缓存? 二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace. 即,在不同的sqlsession中,相同的namespace下,相同 ...