![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQLServer
Wikey_Zhang
这个作者很懒,什么都没留下…
展开
-
SQLServer CTE递归和循环对比的优势--典型案例
首先,我们新建一张测试用的临时表#country,其中包含三个字段,AreaNam(地名) ,BelongTo(上级地名) ,Msg(地方简介)Create table #country (AreaNam NVARCHAR(10),BelongTo Nvarchar(10),Msg varchar(100))下面我们往这张表里插入一堆测试数据:INSERT INTO #countryS原创 2017-05-23 14:35:03 · 3327 阅读 · 2 评论 -
关于ASCII、Unicode、Char、NChar之间的联系与区别
ASCII: 将字符转换为ASC码,只适用编码范围0000-007F之间的字符,十进制:0~127Unicode:将字符转换成Unicode编码,包含ASC码,0000-FFFF之间的全部编码,十进制:0~65535Char:将ASC码还原成对应的字符NChar:将Unicode编码还原成对应的字符注:NChar(160):形似空格的特殊字符具体使用方法如下原创 2017-08-01 18:16:02 · 1548 阅读 · 0 评论 -
浅谈表值函数和标量值函数
表值函数有两种形式:1.内联表值函数CreateFUNCTIONFuntion_name( --这里定义传入参数以及类型)RETURNSTABLEASRETURN( --这里直接写查询语句,返回结果就是查询语句的结果集)GO示例:ALTER原创 2017-07-24 17:59:18 · 3184 阅读 · 0 评论 -
SQLServer使用rand获得随机数
Rand()函数是系统自带的获取随机数的函数,可以直接运行select rand() 获取0~1之间的float型的数字。如果想要获取0~100之间的整数随机数,可以这样使用 select round(100*rand(),0)。为方便使用,下面延伸了一个方法:DECLARE @NumBegin Int=60 --随机数的最小值DECLARE @NumEnd Int=100 --随原创 2017-08-03 17:31:16 · 14911 阅读 · 1 评论 -
SQLServer使用Checksum结合NewID获得随机数
在此之前,先简单了解一下checksum吧! 总和检验码,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。它通常是以十六进制为数制表示的形式,如:十六进制串:它通常是以十六进制为数制表示的形式,如:十六进制串:?10102030405060708原创 2017-08-09 17:48:00 · 5796 阅读 · 1 评论 -
浅谈SQLServer行列转换UNPIVOT函数的使用
紧接着上一篇关于PIVOT函数的例子讲:点击打开存在如下一张临时表:UNPIVOT函数:SELECT * FROM #Studentsunpivot(score for subject in(Chiness,Math,English))upvtUNPIVOT函数和PIVOT函数从结构上书写形式基本一致,只是UNPIVOT不用聚合函数!最终结果呈现形式如下:原创 2017-08-07 15:23:43 · 10294 阅读 · 1 评论 -
Join有关的几种连接查询
JOIN 连接查询是SQL基础中串表查询最重要的组成部分之一,也是SQL初学者入门的一个转折点。内容很基础,但很重要!我们常用如下几种链接方式:1.INNER JOIN (内连接)2.LEFT JOIN (左连接)3.RIGHT JOIN (右连接)4.FULL JOIN (全连接)5.CROSS JOIN (交叉连接,很少用)前四种链接方式都需要 接 ON 进行boo原创 2017-08-15 15:08:38 · 1972 阅读 · 0 评论 -
SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表:SELECT * FROM tableA CROSS APPLY tableB两张表直接连接,不需要任何的关联条件,产生的结果就是这两张表的笛卡儿集,在这里和上一篇帖子讲的cross join交叉连接的结果集是一样的相当于:select * from tableA,tableB与之对应的还有O原创 2017-08-22 16:06:39 · 37096 阅读 · 2 评论 -
SQLServer Stuff函数的用法
语法:STUFF ( character_expression1 , start , length ,character_expression2 ) 参数意义:character_expression1 :传入的字符串,可以是varchar、nvarchar或者是uniqueidentifier(二进制数据类型,如newid())start :起始位置,大于等于1并且小于等原创 2017-08-22 17:57:47 · 2296 阅读 · 1 评论 -
SQLServer FOR XML PATH使用案例
有一张城市表:SELECT DISTINCT province, STUFF ( ( SELECT ','+city FROM #T_city B WHERE B.province=A.province FOR XML PATH('') ),1,1,'' )city FROM #T_city A实现结果:总结:原创 2017-08-23 14:17:06 · 1013 阅读 · 0 评论 -
SQLServer导入excel报错因缺少插件
导入excel步骤:选定数据库右击--》任务--》导入数据数据源选择excel,选择好路径,点下一步,报错如下:需要安装插件,插件的下载地址:点击打开链接原创 2017-08-23 14:40:03 · 3316 阅读 · 1 评论 -
SQL Server进制转换函数的创建
前不久由于工作的需要写了一段关于进制转换的sql,当后来再次用到的时候就把原来写的sql再粘过来,显然显得有点代码冗余。所以像这种常用到的fangfa原创 2017-08-01 16:01:02 · 2436 阅读 · 1 评论 -
浅谈SQLServer行列转换PIVOT函数的使用
以学生表举个例子,展现学生的各门学科和成绩,我们先新建一张表:Create Table Students(Name varchar(10), Subject Nvarchar(10),Score int) Insert into Students Select 'Andy' ,'Chiness',round(60+40*rand(),0) Union all Select 'Bur原创 2017-08-04 13:54:30 · 10902 阅读 · 1 评论 -
开窗函数详解(rank()、dense_rank()、row_number())
首先,我们新建一张表,并且往里面插入一堆测试数据:Create Table #Student(StudentID int, Subjects Nvarchar(10),Score int)Insert into #StudentSelect 1 ,'Chiness',90 Union allSelect 2 ,'Chiness',91 Union allSelect 3 ,'Chine原创 2017-05-26 12:42:10 · 15624 阅读 · 2 评论 -
SQL Server时间格式转换为字符串形式的42种样式
在生产环境中,免不了将时间格式转化为字符串格式,然而以字符串表现的形式却千差万别,但其实最原始的字符串形式无非就是以下几十种,然后再通过字符串处理的方式处理成自己想要的形式:SELECT CONVERT(VARCHAR(MAX),GETDATE(),0) --05 26 2017 5:27PMSELECT CONVERT(VARCHAR(MAX),GETDATE(),1) --原创 2017-05-27 10:06:21 · 1077 阅读 · 0 评论 -
SQL Server收缩数据库日志文件失败的解决办法
由于数据库日志文件过大导致磁盘不够用,我们采取的解决办法是收缩数据库日志文件,但是有时候执行收缩操作的时候不成功也不报错,这就头疼了:先看下,如何做收缩操作的吧:将文件收缩到最小:也可以写SQL执行:DBCC SHRINKFILE('Back_up_log',1)如果执行完以上操作发现数据库日志文件的大小依旧没变,那么试试如下操作之后再试试收原创 2017-06-30 16:18:22 · 10623 阅读 · 1 评论 -
SQLServer添加UPDATE回滚日志(update/delete/insert)
上一篇文章我讲解了delete操作的回滚日志建立的方法,基于上一篇文章的基础,经过修改和增加,实现update操作的回滚日志的建立。首先要注意的是:这里的update并不只是表的update操作,它包含delete和insert操作,完全涵盖上一篇文章的内容。那上一篇文章岂不就多此一举,废话一堆啦?NO~NO~NO~前一篇文章是个启发,简单易懂。行了,废话就讲到这里了!下面直接上代码(copy原创 2017-06-30 14:20:33 · 6921 阅读 · 6 评论 -
十进制与二进制八进制十六进制之间的互相转换
啥也不说了,直接粘代码:--十进制转换二进制、八进制、十六进制DECLARE @NUM INT=66;--在此输入十进制数字DECLARE @type INT=2;--设置返回的进制类型DECLARE @RESULT VARCHAR(500)='';WITH CTE AS(SELECT @NUM/@type D,@NUM%@type S,1 [INDEX]UNION ALLSELEC原创 2017-07-11 14:47:52 · 1097 阅读 · 0 评论 -
使用CTE递归的方式实现时间维度表
关于CTE递归的语法,本人也是刚刚接触到,在介绍这个生成时间维度表之前,我先简单介绍一下CTE递归的语法吧!以方便初学者更容易理解(老司机可以无视)。废话不多说,直接上SQL:with A as ( select 1 NUM union all select NUM+1 from A where NUM<20原创 2017-05-19 16:39:58 · 980 阅读 · 2 评论 -
SQL Server添加Delete操作回滚日志
我们在操作表的时候难免会遇到误删除,或者删掉的数据还想恢复的情况。也许细心的朋友会用begin tran rollback/commit 这种事务来避免出现失误,但这并不是最保险的。如果提交了事物发现删错了或者忘记提交从而导致表被锁,这些问题总是不可避免的。废话不多说了,下面直接进入正题,通过触发器记录删除日志,避免误删除带来的尴尬。下面这段sql粘过去直接运行,建立一个存储过程:原创 2017-06-23 15:18:31 · 6752 阅读 · 2 评论 -
SQL Server数据导入报错的问题
今天使用sqlserver的数据导入的功能,将txt文本的数据导入到数据库表里面,可是遇到了如下报错:提示关于文本截断的报错,开始还以为我的目标表的字段长度不够长,即使我将字段长度设置为MAX也一样会报同样的错误,经过好一番折腾才发现,问题原来出现在这里:在选择数据源的界面有个高级选项,里面有个输出列宽度默认值是50,如果导入的数据有的列里面的值长度超过50的话就会报错原创 2017-07-12 15:48:15 · 2493 阅读 · 2 评论 -
简述游标的使用
游标的使用可以简单归类为5个步骤:1.定义游标2.打开游标3.使用游标4.关闭游标5.释放游标如下是游标简单实用的示例:--1.定义游标DECLARE test_Cursor CURSOR FORSELECT ID,NAME FROM TEST--2.打开游标OPEN test_Cursor--3.使用游标DECLARE @ID INT,@NAME原创 2017-07-10 12:10:15 · 4129 阅读 · 1 评论 -
SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择
PIVOT函数中必须要包含一个聚合函数,聚合函数分别是:COUNT、SUM、MAX、MIN、AVG,针对不同的使用场景,该选择哪个聚合函数,意义都是不一样的,下面还是举例说明吧!我建了如下一张销售表并且插入一下测试值:CREATE TABLE SalesOrder( 门店 VARCHAR(50), 商品类型 VARCHAR(50), 销售额 INT)INSERT INTO Sa原创 2017-08-07 16:05:44 · 18146 阅读 · 4 评论 -
sqlserver添加mysql链接服务器
下载驱动:https://dev.mysql.com/downloads/connector/odbc/开始--》管理工具--》数据源(ODBC):驱动程序那边已经出现了刚刚安装的驱动了选择系统DSN-->添加红框内都是必填项,填入mysql服务器的地址以及登录名,端口号默认是3306,填好之后点test 出现Connection successful代表OK了原创 2018-02-11 17:11:53 · 921 阅读 · 0 评论