分享SQL Server知识与经验。
主要介绍SQL Server在使用的过程中常用的一些技巧,以及需要注意的问题,同时对一些新的特性方法等进行介绍
二月十六
数据库交流群:195233677
展开
-
Sheet1$.输出[Excel 源输出].列[XXX] 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。
Sheet1$.输出[Excel 源输出].列[XXX] 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。原创 2022-06-23 22:31:24 · 1642 阅读 · 0 评论 -
数据库SQL交流群
数据库交流原创 2022-03-21 13:51:37 · 3710 阅读 · 0 评论 -
SQLSERVER 集合处理——EXCEPT
SQLSERVER两表之差原创 2022-03-19 21:51:51 · 4435 阅读 · 0 评论 -
SQL SERVER 递归查询(1)——常用方法(CTE写法、函数)
我们在实际查询中,时常会碰到需要递归查询的例子,SQL SERVER 2005之前的版本可以用函数方法实现,SQL SERVER 2005之后可以利用CTE(公用表表达式Common Table Expression是SQL SERVER 2005版本之后引入的一个特性)的方式来查询。--测试数据if not object_id(N'T') is null drop table T...原创 2018-03-16 10:00:39 · 20978 阅读 · 0 评论 -
SQL SERVER 递归查询(2)——向下递归计算
向上向下累加减,是常用递归来实现的,在上篇博客中,介绍了递归的函数和CTE写法,并把向上累加做例子介绍了,这次我们介绍一下向下做减的写法,计算每月的余额,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([id] INT,[month] nvarchar(23...原创 2018-03-16 22:19:23 · 30483 阅读 · 2 评论 -
SQL SERVER 递归查询(3)——分组递归
有时候我们需要按照分组递归查询,比如省市区,同一个省同一个市的要放到一起显示,而我们原始数据又不是这样排列的,所以需要我们做一下处理,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Id] int,[Name] nvarchar(24),[FatherId] i...原创 2018-03-17 16:49:45 · 11574 阅读 · 0 评论 -
SQL SERVER 递归查询(4)——递归层级查询
我们在做递归查询的时候,有时候需要查询特定某一级的数据,如果我们的数据上没有标注该数据的层级数,那么我们可以在递归的时候自己加一个,并在读取的时候作为查询条件来用,测试数据:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Id] int,[Name]...原创 2018-03-19 16:40:38 · 15999 阅读 · 0 评论 -
SQL SERVER FOR XML PATH 用法
有时候我们需要把多行数据,合并成一行显示,并用逗号或者其他方式分隔显示,这时候我们可以使用FOR XML PATH的方式,来实现需求。测试数据如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Province] nvarchar(22),[City] nvarchar...原创 2018-03-24 11:08:21 · 17505 阅读 · 0 评论 -
SQL SERVER EXCEPT、INTERSECT 用法
EXCEPT主要是用来获取两个结果集的差;两个结果用EXCEPT链接,返回第一个结果集不在第二个结果集中的数据。INTERSECT主要是用来获取两个结果集的交集;两个结果用INTERSECT链接,返回两个结果集中的相同部分,测试数据:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate ta...原创 2018-03-30 11:14:46 · 15119 阅读 · 0 评论 -
SQL SERVER 连乘写法
SQL SERVER 提供了SUM、COUNT、MAX、MIN、AVG等聚合函数,但是没有提供连乘的函数,但是在实际开发过程中,我们可能会用到连乘的数据,所以我们可以自己实现连乘的写法,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([num] int)Ins...原创 2018-04-03 17:05:05 · 7407 阅读 · 0 评论 -
SQL SERVER 游标使用
我们在处理数据的时候,经常会出现需要循环处理数据的需求,如果我们能用CTE或者其他语句处理的话,没有问题,但有时候往往处理起来比较困难,这时候我们可以选择使用游标处理,选择使用哪种形式,要考虑效率问题,一般游标效率不高,但也有适合使用的场景。 游标分为静态游标和动态游标,静态游标的数据是固定的,不会因为数据表的改变而改变;动态游标的数据是随着数据表变化而变化的,游标默认是...原创 2018-04-04 09:14:36 · 53081 阅读 · 8 评论 -
SQL SERVER 表分区技术
当一个数据库表的数据达到千万级别的时候,这时候磁盘的I/O就成了性能的瓶颈,因此如果能提高磁盘的I/O能力,也就相应的提高了数据库的效率。SQL Server推出了表分区技术。表分区就是把一个数据库表文件拆分成多个文件,并放到不同的文件组甚至是不同的磁盘中,但是在外界访问时看到的还是一个数据库表,这样不同的磁盘不同的文件组可以提高并发访问效率,而对于开发技术人员来说面对还只是那一张表,和单表没有区...原创 2018-04-08 08:08:54 · 10186 阅读 · 1 评论 -
SQL SERVER 利用触发器禁止删除数据并记录删除日志
有时候我们数据库表中的数据会莫名其妙的被删除,不知道是业务问题还是被黑了,所以我们想要在数据库操作层面对此进行制止,同时记录操作的日志,我们可以利用触发器来实现这个需求,测试数据:--测试数据if not object_id(N'T') is null drop table TGoCreate table T([ID] int,[姓名] nvarchar(22))I...原创 2018-04-08 10:26:46 · 19580 阅读 · 2 评论 -
SQL SERVER 90度行列互换
我们有时候在处理数据显示的时候,需要把之前的数据进行90度的行列互转(注:不是行转列),数据处理起来比较麻烦,提供一个方法,测试数据:--测试数据if not object_id('tab') is null drop table tab Go Create table tab(a0 NVARCHAR(100),a1 int,a2 int,a3 int) In...原创 2018-04-08 15:53:17 · 5446 阅读 · 0 评论 -
SQL SERVER MERGE 有则更新无则插入
我们在处理数据的时候,往往会有“有则更新、无则插入”的需求,在SQL 2008 之前,通常是通过if 判断等,来做查询处理,SQL 2008 引入了MERGE ,可以更好的实现我们的需求,测试数据:--测试数据if not object_id(N'SourceTable') is null drop table SourceTableGoCREATE TABLE DB...原创 2018-04-09 10:07:06 · 10926 阅读 · 0 评论 -
SQL SERVER 行列转换(1)——聚合函数静态转换
在实际开发中,有时候需要对数据表进行行列转换,转换之后再显示对应的数据,行列转换的方法比较多,本次介绍静态的利用聚合函数来实现,行转列测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Name] nvarchar(22),[Subject] nvarchar(22...原创 2018-04-09 11:09:57 · 5848 阅读 · 0 评论 -
SQL SERVER 行列转换(2)——PIVOT、UNPIVOT 转换
上篇博客介绍了静态方式的行列转换,这次介绍一下利用SQL SERVER 函数实现的行列转换,行转列测试数据同之前的一样:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Name] nvarchar(22),[Subject] nvarchar(22...原创 2018-04-09 11:29:37 · 6812 阅读 · 0 评论 -
SQL SERVER 行列转换(3)——动态转换
前边介绍了静态转换和PIVOT、UNPIVOT转换的方式,这次介绍一下动态拼接转换的形式,有时候我们的数据不是固定的,可能会有多条,所以需要我们动态进行拼接实现,行转列测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Name] nvarchar(22),[S...原创 2018-04-09 13:34:22 · 16372 阅读 · 0 评论 -
SQL SERVER 多字段不为空COALESCE用法
有时候我们需要对多个字段进行非空判断,显示几个字段中不为空(最前边)的那个,字段少的时候,我们可以使用CASE WHEN做判断,但是多的时候写起来就比较麻烦了,这时候我们可以用COALESCE,测试数据:--测试数据 if not object_id(N'Tempdb..#T1') is null drop table #T1 Go Create table...原创 2018-04-13 09:21:28 · 15362 阅读 · 0 评论 -
SQL SERVER 利用ROW_NUMBER 删除重复数据
分享一个小知识点,论坛里也常有人问这种问题,表中数据除了ID不同,其他数据一样,然后保存ID最大(或者最小)值,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Name] nvarchar(22),[Class] int)Insert #...原创 2018-04-19 08:36:27 · 13236 阅读 · 1 评论 -
SQL SERVER 利用spt_values 生成连续日期数据
有时候我们在展示数据的时候想要展示本月所有天数的数据,但是我们数据库里只存储了有数据的日期,当天没有数据插入的数据就没有存储,例如这样:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([DataTime] Date,[DataValue] int)Insert #T...原创 2018-04-21 09:08:44 · 8393 阅读 · 0 评论