
Sql Server基础进阶系列
文章平均质量分 65
入秋枫叶
大道至简
展开
-
聚集索引和非聚集索引的深入理解与应用
近期看到一篇介绍聚集索引与非聚集索引的好文,很通透,值得借鉴,下方附有原文链接==官方说法:聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组...转载 2020-04-01 11:15:59 · 410 阅读 · 0 评论 -
SQL在数据库中查找拥有某一个字段的表
SELECT * from (select column_name,TABLE_NAME from information_schema.columns where table_schema ='数据库名') a where a.column_name = '字段名'转载 2020-02-13 09:47:47 · 2532 阅读 · 0 评论 -
SQL表连接inner join、outer join和cross join区别
平时开发中使用的 left join 和 right join 其实是 left outer join 和 right outer join,另外 outer join 还包括 full join。现有两张表,Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的:1. INNER JOIN 产生的结果是AB的交集SELECT * F...转载 2019-01-22 14:08:23 · 1900 阅读 · 2 评论 -
在线审批流实现
平时的请假、合同申请、采购单申请、发货单申请等流程如果均可实现在线审批,将会很大程度上节省资源,下面就是一个实现流程。一、审批流数据模型设计(使用power designer)二、实现的存储过程审批通过功能:-- =============================================-- Notes: 流程审批--通过-- =======...原创 2018-10-24 17:34:41 · 10196 阅读 · 5 评论 -
SQL存储过程的递归调用
存储过程和函数一样也可以递归调用,调用方法类似。如下是求某个数以内的数字求和:CREATE PROCEDURE aProc_Test @INPUT int, @Sum int outputASBEGIN SET NOCOUNT ON; if(@Sum is null) set @Sum=0 if(@INPUT>0) begin ...原创 2018-08-20 10:07:39 · 4744 阅读 · 0 评论 -
SQL Server 查找自增ID值不连续记录
在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID。当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复;或者在某些情况(例如插入数据的时候出错,或者是用户使用了Delete删除了记录)下会让ID值不是连续的,比如1,2,3,5,6,7,10,那么在中间就断了几个数据,那么我们希望能在数据中找出这些相关的记录,我希望找出的记录是...转载 2018-07-10 18:09:15 · 5474 阅读 · 0 评论 -
MS SQL用两个字段中较大的值为条件进行查询
要实现功能:以做K3时间与安装完成时间较晚的时间作为工程师奖金核算月份。select a.IAId,a.achproid,b.InstallId,b.InstallDate,ap.K3Datefrom CRM_ApplyProduct a left join CRM_InstallApply b on b.Id=a.ApplyId left join CRM_AchievementPro...原创 2018-06-26 09:04:02 · 5199 阅读 · 2 评论 -
SQL无法删除数据库,因为该数据库当前正在使用
USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'databasename' --这个是要删除的数据库库名 DECLARE @s NVARCHAR(1000) DECLARE tb CURSOR LOCAL FOR SELECT s = 'kill ' + ...转载 2018-06-01 10:17:09 · 10104 阅读 · 0 评论 -
SQL在将 varchar 值 '1,2,3,4' 转换成数据类型 int 时失败
sql中使用in查询int类型拼接起来的字符串时会出现如题错误。 原语句:declare @ids varchar(1000) set @ids='1,2,3,4' select * from users where id in (@ids) 这样最后输出的语句其...原创 2018-04-26 16:41:23 · 8526 阅读 · 0 评论 -
操作(添加/修改/删除 )sql表字段说明/描述的语句
–创建表create table CRM_Agreement(N'CState varchar(10),a2 char(2))–为表添加描述信息EXECUTE sp_addextendedproperty N'MS_Description', '合同信息表', N'user', N'dbo', N'table', N'CRM_Agreement', NULL, NULL–为字段a1添加描述信息EXE原创 2017-10-30 14:01:51 · 6191 阅读 · 0 评论 -
SQL优化指南——优化工具使用
优化的场景分为单纯场景与复杂场景,不同场景有不同场景的优化工具与手段,我们在优化sql语句时应该先判断属于哪一种场景,根据场景选择优化途径,不要盲目地去优化sql语句,否则得不偿失。 1.单纯场景。 例如一条sql语句很慢,原因是没有用高效的索引而是走的全表扫描,加个索引就解决问题,又比如一条sql优化到执行速度1s左右,逻辑读50个左右,应该就可以了。这就是单纯场景,差不多无须再考虑优化了。转载 2017-07-07 13:45:56 · 1448 阅读 · 0 评论 -
SQL常用命令语句收集
sql server中有很多内置的命令,我们只需要调用即可,熟练使用这些语句可以很大提高我们的工作效率,下面是编者收集的一些常用命令语句,以后有新发现时会持续更新。ALTER TABLE TableName Add 字段 类型 NOT NULL DEFAULT 0--添加字段ALTER TABLE TableName alter column 字段 类型 NOT NULL--修改字...原创 2017-06-10 13:46:51 · 1343 阅读 · 0 评论 -
SQL参数数据类型text对于replace函数的参数1无效
当执行语句:update SupplyInfo set ProdInfo=replace(ProdInfo,'中国总代理','中国指定代理')where CompanyID=83406因为列ProdInfo为text类型,即SQL语句中用到replace时若操作列类型为text类型会有MSSQL报错:参数数据类型text对于replace函数的参数1无效。 原因:对text或ntext类型的数原创 2017-06-05 09:18:04 · 19391 阅读 · 0 评论 -
SQL索引创建原则、创建与删除示例
一、索引创建原则:表的主键、外键必须有索引;数据量超过300的表应该有索引;经常与其他表进行连接的表,在连接字段上应该建立索引;经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;索引应该建在选择性高的字段上;索引应该建在小字段上,对于大的文本字段甚至超长字段(例如数据类型为text或ntext的字段),不要建索引;频繁进行数据操作的表,不要建立太多的索引;删除无用的索原创 2017-06-03 09:44:21 · 6126 阅读 · 1 评论 -
“单个用户”不能访问,设置成多个用户的办法
原本想分离本地数据库,结果不小心就对SVN上的数据库执行了分离操作,因为当时SVN上的数据库是多个人在用,因此当然也没有分离成功,但是此时本地连接SVN时这个数据库名称后面就出现了“单个用户”字样,如下图:无法打开数据列表,报错如下:原因是进行分离操作时自动将该数据库改为了单用户模式,可通过执行如下语句恢复多用户模式。USE master;GODECLARE @SQL VARCHAR(MAX);原创 2017-06-03 09:09:20 · 6243 阅读 · 0 评论 -
SQL存储过程的优点、创建、互相调用与调试
存储过程的优点: 1.只在创建时编译,一般sql语句每执行一次就编译一次,另外,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,因此可提高数据库执行速率。 2.可以实现只连接一次数据库就可以完成一个复杂的操作,如对多个表进行INSERT,UPDATE,DELETE,SELECT时,可将此复杂操作利用存储过程封装起来与数据库提供的事务处理...原创 2017-06-02 09:53:40 · 818 阅读 · 0 评论 -
SQL从一个表查询数据插入/更新到另一个表
在应用中我们可能会遇到一些数据导入操作,如从一个表查询出数据插入到另外一个表,或从一个表查询出数据更新到另外一个表,这些操作一般都是一次性操作,针对一次性操作,效率只是第二位,第一位的是功能实现。这个操作既可以用于同一个数据库不同表之间,也可以用于不同数据库不同表之间。示例一: 从数据库DataBaseA的表LabMallClassXX中查询出数据插入到数据库DataBaseB的表LBClassX原创 2017-06-01 08:57:09 · 39982 阅读 · 11 评论 -
SQL去除字符串中HTML标签
当一个字段中存储有带有html标签的字符串,而我们想获取的是该字符的纯文本时应该怎么处理,其中一个实现方法就是创建一个去html的函数,当需要时直接调用即可。自定义函数如下:create function ClearHtml (@input_str varchar(8000))returns varchar(8000)asbegin declare @randchar_one nvar原创 2017-05-31 09:36:29 · 4761 阅读 · 3 评论 -
SQL临时表——分类页面的参数条件筛选
在产品分类列表页面如何做到参数筛选,即如果该分类的参数是查询出来的,参数个数是不固定的,我们需要点击某个参数值去筛选产品,实现效果可以参见京东的分类列表页面。下面就是实现的方法,其中Product是产品表,Product_relate_spec是产品参数关联表,Product_relate_spec的结构如下:另外有两个表在此没有体现出来,一个是三级类与参数关联表Product_spec,结构如下:原创 2017-05-30 09:40:14 · 1089 阅读 · 0 评论 -
SQL分组获取记录的第一条数据——PARTITION BY
在查询数据时如果有重复,我们都知道可以用distinct去重,但使用distinct只能去除所有查询列都相同的记录,如果有一个字段不同,distinct是无法去重的,但我们还想要实现这样的效果,这时我们可以用partition by。 1.使用ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)先进行分组。(根据COLUMN1分组,在分组原创 2017-05-29 10:38:19 · 40991 阅读 · 4 评论 -
SQL左连接——查询每个用户各操作类型的文章数量
现有基本表tb_News如下,要实现查询每个用户各种操作类型的文章数量,可以借助临时表实现。而且在查询结果中如果字段为NULL,将其设置为0。实现语句:select List.UserID,ISNULL(bianyi,0) as '编译',ISNULL(zhuanzai,0) as '转载',ISNULL(bianji,0) as '编辑' from (select UserID from dbo原创 2017-05-27 09:30:08 · 1416 阅读 · 0 评论 -
SQL截取字符串中某个字符之前/后的子字符串——自定义函数
在C#中我们可以用Index()或LastIndexOf()与SubString()相结合来获取某个字符之前或之后的子字符串,但是在sql server中应该如何实现这一功能呢?我们可以通过charindex和substring相结合从而间接的实现这种功能,具体语句如下:DECLARE @Name nvarchar(50)SET @Name = '12345.abcde.ABCDEF'DECLAR原创 2017-05-26 13:41:40 · 9356 阅读 · 0 评论 -
SQL数据库备份与恢复
一、数据库备份 在sql server中,完全备份一个数据库我一般用数据库的分离、复制,即手动备份,使用时可以直接对复制的数据库进行附加即可。当然我们也可以用sql语句通过生成备份文件(后缀名为.bac)对数据库进行备份。备份方式分为以下几种(以数据库luoke为示例):1.全量数据备份(Full Database Backup) 即备份整个数据库,恢复时恢复所有。操作简单,易实施,但数据量太大原创 2017-05-25 10:08:17 · 1460 阅读 · 0 评论 -
SQL游标使用——格式、实例、嵌套
在sql语句中,如果要实现诸如for循环一样的功能就会用到游标,但游标一定要慎用,因为它会很大的影响数据库性能。一、游标的一般格式:DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...OPEN 游标名称FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...WHILE @@FETCH_S原创 2017-05-24 13:56:58 · 2679 阅读 · 0 评论 -
SQL查询包括本级分类的无限级分类列表
针对无限级分类列表,如果要查询包含本级分类在内的所有符合条件的分类列表。 具体问题: 现有部门表department是一个无限级分类表,包含一级部门、二级部门等,如果要根据部门一级分类id即dept_id去查询该一级部门下的所有员工列表(员工表HR_Employee ),思路是先根据一级分类dept_id查询出该一级部门下的所有子部门的id列表,再根据符合条件的部门id查询员工,具体实现如下:w原创 2017-05-23 09:25:59 · 3353 阅读 · 0 评论 -
SQL统计函数、数学函数及示例
统计函数AVG()语法:avg(column_name) 返回列column_name的平均值 示例:select avg(Hits) from LB_News 返回表LB_News的Hits列的平均值。COUNT()语法:count(column_name) 或 count(0) 或 count(1) 返回符合条件的数据行数。FIRST()/LAST()语法:fi原创 2017-05-22 15:22:01 · 1798 阅读 · 0 评论 -
SQL日期操作函数及示例
GETDATE()以datetime的缺省格式返回系统当前的日期和时间。 示例:select getdate() 返回结果:2017-05-20 13:22:16.060DAY()语法:day(date_expression) 返回date_expression中的日期值 示例:select day(‘2017-5-20 11:50:53’) 返回结果:20MONTH()语法:month(d原创 2017-05-20 13:30:00 · 1534 阅读 · 1 评论 -
SQL字符串操作函数及示例
REPLACE()语法:REPLACE(‘string_replace1’,’string_replace2’,’string_replace3’) ”string_replace1” 待搜索的字符串表达式。string_replace1 可以是字符数据或二进制数据。 ”string_replace2” 待查找的字符串表达式。string_replace2 可以是字符数据或二进制数据。 ”st原创 2017-05-19 11:48:29 · 1430 阅读 · 0 评论 -
SQL Server触发器及其操作语句
一、 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入、更新或删除记录时被自动激活。所以触发器可以用来实现对表实施复杂的完整性约束。二、 SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除转载 2017-05-16 14:56:28 · 6620 阅读 · 0 评论 -
sql自定义函数实现字符串分割Split()功能
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE function [dbo].[SplitString]( @Input nvarchar(max), @Separator nvarchar(max)=',', @RemoveEmptyEntries bit=1 )returns @TABLE table...转载 2017-05-12 14:38:15 · 3467 阅读 · 0 评论