SQL SERVER常见问题
二月十六
数据库交流群:195233677
展开
-
SQL Server自增主键插入已知值
自增长字段插入数据SET IDENTITY_INSERT t_user_goods ON;SET IDENTITY_INSERT t_user_goods OFF;原创 2022-02-20 22:37:45 · 2493 阅读 · 0 评论 -
数据库SQL交流群
近期写博客和上论坛的时间少了,很多时候在QQ群里交流,QQ群号:195233677原创 2021-02-25 08:05:52 · 1816 阅读 · 0 评论 -
SQL SERVER 生僻字查询问题和关键字COLLATE
先说问题,生僻字查询的问题,有的时候我们的数据里包含一些生僻字,在查询用Like模糊匹配的时候,发现有的查询不准确,测试数据如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([col] nvarchar(21))Insert #Tselect N'䱗'UNIONSELECT N'啊'Go--测试数据结束 如果这时候用Like查询,就会存在查询不准...原创 2020-10-24 11:19:30 · 3187 阅读 · 0 评论 -
安装SQL SERVER2019 安装CAB文件问题
文件下载下来是1033.cab结尾的文件。需要改成下载链接后边的CID文件。就可以点击下一步了,不然无法识别。一篇日本博客给我的启示。他的改成1041了,而我的应该是2052http://tricra.doorblog.jp/archives/81526726.html...原创 2020-02-16 21:55:09 · 7249 阅读 · 5 评论 -
SQL表中存储计算公式,直接执行
这个题目有点绕口啊,其实这个需求也是在论坛里发现的,觉得挺有意思,记录一下。论坛帖子地址:https://bbs.csdn.net/topics/392480285 就是一个表中几个字段,其中一个字段存储的是利用前边几个字段的一个计算公式,要把这个计算公式的值算出来,直接上例子。CREATE TABLE #(W1 INT,W2 INT,W3 INT,W4 INT...原创 2018-11-20 13:42:36 · 14162 阅读 · 0 评论 -
SQL SERVER 读取次大值或次小值
很多时候我们查询数据都是查询最大值或者最小值,一般都是利用Max或者Min函数来实现,一般很少求次大值的,其实实现也很简单,记录一下为大家提供一下思路,这篇博客介绍一下利用ROW_NUMBER PARTITION BY怎么求次大值(次小值)。 测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop t...原创 2018-12-07 09:05:34 · 3829 阅读 · 0 评论 -
SQL SERVER 截取多个分隔符中指定第几个分隔符的前边的内容
又是一个难懂的标题,上例子吧,比如一个字符串,‘abc,1344,343,13as,33,343’,这个字符串都是用','分隔的,现在想截取第四个逗号前边所有的内容,方法如下:CREATE FUNCTION [dbo].[Get_StrArrayStrOfIndex]( @str VARCHAR(1024), --要分割的字符串 @split VARCHAR(...原创 2018-12-07 14:55:37 · 9648 阅读 · 0 评论 -
SQL SERVER 使用触发器的情况下@@IDENTITY不准确的问题
@@IDENTITY是返回最后插入的标识值的系统函数。在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。 我们常用@@IDENTI...原创 2018-12-16 11:09:11 · 2266 阅读 · 0 评论 -
SQL SERVER跨表计算列
我们的表字段有时候要用到计算列,有时候计算列需要跨表计算,但是直接加入查询语句报错,我们可以使用函数来实现跨表计算列功能。 测试数据:--测试数据if not object_id(N'user') is null drop table [user]GoCreate table [user]([uid] int)Insert [user]select ...原创 2018-12-17 09:17:06 · 3157 阅读 · 0 评论 -
SQL SERVER通过汉字获取所有拼音字母
问题地址:https://bbs.csdn.net/topics/392516195CREATE FUNCTION [dbo].Fn_PinYin (@str VARCHAR(100))RETURNS @t TABLE (col NVARCHAR(200))ASBEGIN declare @re varchar(8000),@crs varchar(10) declare...原创 2019-02-14 17:14:16 · 3062 阅读 · 0 评论 -
SQL SERVER交叉重复去重
去重是SQL SERVER里边一项常用的功能,一般用DISTINCT关键字来实现,但是DISTINCT只能去重完全相同的内容,如果是有两个字段,交叉重复去重,还需要特殊处理一下,方法如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([字段A] nvarch...原创 2019-08-03 08:31:36 · 2470 阅读 · 0 评论 -
SQL SERVER特殊字符处理
有时候我们再查询的时候会发现看到和想要不一样的结果,比如看着表里的数据就是有这个值,可是按照这个值去查询的时候怎么也查询不到,这时候可能就是一些特殊字符在作怪了。比如下边:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([col] nvarchar(22))Ins...原创 2019-07-27 16:13:09 · 5636 阅读 · 0 评论 -
SQL SERVER求每行最大列值
我们一般都是求某一列的最大值,但是偶尔也会有求每一行中的最大值,今天介绍一下,每行最大值的写法--测试数据if not object_id(N'T') is null drop table TGoCreate table T([id1] int,[id2] int,[id3] int)Insert Tselect 1,2,3union allselect...原创 2019-08-11 18:54:41 · 2517 阅读 · 0 评论 -
SQL SERVER ntext、image等无法使用DISTINCT
我们常用DISTINCT来去重,但是sql中有的字段类型是不允许用DISTINCT的,例如ntext,image等--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([userid] int,[username] nvarchar(22),[cardcode] ...原创 2019-08-11 19:05:11 · 2348 阅读 · 0 评论 -
SQL SERVER 统计(1)——CUBE介绍
我们有的时候要对数据进要做小计合计等工作,普通的方式,我们可以用聚合函数,然后配合UNION等函数处理,SQL SERVER其实提供了CUBE来实现这个功能。 以下是介绍: CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据(即记录个别事件的数据)的扩展。扩展是基于用户要分析的列建立的。这些列称为维度。多维数据集是结果集,其中包含各维度的所...原创 2018-07-20 11:20:59 · 9344 阅读 · 0 评论 -
SQL SERVER Reverse函数使用技巧
Reverse函数,是SQL SERVER是一个函数,主要是用来实现字符串倒置的一个功能,可以把字符串里各个字符的顺序倒过来,看下这个例子:DECLARE @str NVARCHAR(1000)SET @str='ABCD'SELECT @str 结果是: 我们应用Reverse之后的效果:DECLARE @str NVARCHAR(1000)SET @...原创 2018-07-06 15:53:09 · 13145 阅读 · 0 评论 -
SQL SERVER 用for xml path自动转义尖括号问题
有时候我们的数据库中有尖括号,然后有用到xml的时候,sql会自动的把尖括号进行转义,但是我们不需要需要,对这个有要求,我们可以用value的形式来实现,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Chemistry] nvarchar(47...原创 2018-07-05 20:44:34 · 6784 阅读 · 0 评论 -
完全删除SQL SERVER
我们在安装SQLSERVER的时候,有时会出现问题,而在重新安装的时候,有时候会因为上次安装遗留的东西而导致本次安装失败,所以完全删除SQLSERVER比较重要。完全删除方法如下: 1、控制面板里删除。 2、安装目录文件夹删除。 3、注册表删除。 4、安装windows install clean up 删除所有sql相关的东西。 ...原创 2018-03-13 10:59:25 · 25910 阅读 · 0 评论 -
无法连接到SQL SERVER数据库
无法连接到数据库时,检查以下几项: 1、网络情况。检查tcp/ip是否启用,并注意端口号。 打开SQL SERVER配置管理器,检查网络配置 2、ping 服务器地址,检查网络问题。 3、利用telnet命令,检查端口情况。 如果网络存在问题,检查一下防火墙设置,或者先关闭试试。 4、检查服务器项。用户名密码是否正确。 5、服...原创 2018-03-14 09:03:09 · 76155 阅读 · 14 评论 -
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 · 5421 阅读 · 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 · 10894 阅读 · 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 · 13172 阅读 · 1 评论 -
SQL SERVER 字符串自增列
有时候我们对自增的主键有特殊的要求,不仅仅是数值型自增长,可能还要类似特殊字符+时间+自增长数值这样的效果,这样的需求,可以在新建表的时候,对自增主键进行设置,实现方法如下:CREATE TABLE testtab( ID INT IDENTITY, PRIMARYKEY AS 'T' + CONVERT(VARCHAR(100), GETDATE(), 112) ...原创 2018-05-01 15:14:44 · 12252 阅读 · 2 评论 -
SQL SERVER查询区分大小写
一般SQL Server数据库在查询数据的时候,都是默认不区分大小写的,但是如果我们有特殊需要,要对数据查询的时候区分大小写,我们可以使用COLLATE 来实现这个需求,测试数据:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate table #T1(name VARCHAR(50))I...原创 2018-05-02 20:57:39 · 12410 阅读 · 0 评论 -
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 · 8350 阅读 · 0 评论 -
SQL SERVER 读取数据库中所有表名
分享一个小技巧,我们有时候在操作数据库时,不管是统计还是做动态语句拼接操作,需要读取所有数据表的名字,我们可以使用下边的语句来读取所有表名:SELECT nameFROM sysobjectsWHERE xtype = 'u'; 结果: 除了上边的语句,我们还可以使用sp_MSforeachtable来实现,读取语句如下:EXEC sp_MSforeacht...原创 2018-05-04 17:54:38 · 7150 阅读 · 0 评论 -
SQL SERVER 获取差值最小的数据
分享一个小技巧,获取和自己差值最小的数据,测试数据如下:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate table #T1([code] int,[value] int)Insert #T1select 1,10 union allselect 2,50 union allse...原创 2018-05-07 14:06:09 · 6857 阅读 · 0 评论 -
SQL SERVER获取字符串中小写字母
有时候我们会截取字符串中的一些特殊想要的东西,大小写字母、模号、汉字、数字等等,今天先介绍一个获取字符串中小写字母(也是大写字母)的方式,直接上写法:DECLARE @s VARCHAR(MAX)= 'AbcdEf奥奥' --待截取字符串DECLARE @temp VARCHAR(MAX)='' --临时变量SELECT @temp=@temp+SUBSTRING(c...原创 2018-05-15 08:44:16 · 5526 阅读 · 0 评论 -
SQL SERVER 利用触发器记录登录日志
有时候我们需要记录谁登陆过我们的服务器,来确定一些信息,我们可以使用触发器来实现,参考文档:登录触发器 新建日志表:CREATE TABLE TBLOG ( ID INT NOT NULL IDENTITY(1, 1) , EVTIME DATETIME NOT NULL DEFAULT ( GETDATE() ) , ...原创 2018-06-05 09:12:00 · 11633 阅读 · 1 评论 -
SQL SERVER 子查询删除注意事项
我们在做删除的时候,往往要求把要删除的数据,先按照条件搜索一遍,看看那搜索出来的数据是否是要删除的数据,防止因为条件写错了误删数据,但是如果这个东西应用的不规范,可能会造成更大的麻烦。测试数据:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate table #T1([Id] int,[Na...原创 2018-06-25 14:07:48 · 4009 阅读 · 0 评论 -
SQL SERVER ISNUMERIC函数判断数字不准确问题
判断字段是不是数值型字段,SQL SERVER提供了ISNUMERIC函数: ISNUMERIC ( expression ) 当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。 有效的 numeric 数据类型包括以下类型: intnumericbigintmoneysmallintsmallmoneytinyintf...原创 2018-03-15 15:14:09 · 40149 阅读 · 0 评论