
数据库技术
左眼看成爱
做一个素净的人,把目光停留在微小而光明的事物上,远离那些尘世的混乱和喧嚣。余生漫长,希望你生活的地方,天足够蓝,阳光足够好,街边的小吃店好吃又卫生,回家的路灯总是为你亮着。
展开
-
SQLite中计算当前日期跟某个日期相差的天数
SQLite中计算当前日期跟某个日期相差的天数。最终直接整合到SQL语句中去。原创 2023-05-12 17:50:01 · 2583 阅读 · 0 评论 -
SQLite near “(“: syntax error的原因及解决方法
经核实,语法并没有问题,问题来自于Left是SQL Server的内部函数,SQLite并不支持Left,几番调试之后,发现 left 是 SQLite 的保留字(LEFT JOIN),left 的功能可以使用SQLite中的substr函数来代替。原创 2023-04-17 15:51:38 · 13113 阅读 · 0 评论 -
SQL“除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效“ 解决方法
SQL查询语句带order by 生成临时表会报如下错误:消息 1033,级别 15,状态 1,第 4 行除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。完成时间: 2022-05-18T20:37:48.5772732+08:00解决方法使用top 100 Percent *即可 如果要保留排序,则使用使用top 99.99 Percent *即可...原创 2022-05-18 20:49:22 · 6149 阅读 · 1 评论 -
SqlServer 子查询order by 生成临时表保留排序方法
比如语句如下:if OBJECT_ID('tempdb..##czk')is not null drop table ##czk select * into ##czk from ( select * from ##TTBillRecord union select * from ##TTICBillRecord order by bclientid,bicnum,bminusictime ) as ##czk 执行会报错:消息 1033,级别 15,状态 1,第 4 行原创 2022-05-18 20:42:39 · 965 阅读 · 0 评论 -
SQL生成全库或某张表全部索引对应关系和创建语句
DECLARE @tabname varchar(50)set @tabname='bill'--表名if ( object_id('tempdb.dbo.#IDX') is not null)beginDROP TABLE #idxendSELECT a.name as IndexName, c.name as TableName, d.name as IndexColumn, i.is_primary_key,--为主键=1,其他为0 .原创 2022-02-26 14:26:45 · 226 阅读 · 0 评论 -
SpringBoot 错误“errorCode 1045, state 28000” 原因及解决方案
错误信息:2022-02-08 14:17:32.022 INFO 1816 --- [nio-8080-exec-3] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited2022-02-08 14:17:32.110 ERROR 1816 --- [eate-1764881818] com.alibaba.druid.pool.DruidDataSource : create connection SQLExcept...原创 2022-02-08 14:21:52 · 3777 阅读 · 0 评论 -
Notepad++将SQL语句生成Delphi中的格式(前面添加加号和单引号,后面加空格和单引号
原语句if not exists (select * from sysobjects where id = object_id('OilRange') )begin CREATE TABLE [OilRange] ( [uuid] VARCHAR(40), [StationID] int , [TankID] int, [GenTime] DATETIME , [GenBatch] int, [OilHight] DECIMAL(18,4) , [OilVol]原创 2022-01-23 20:53:00 · 1286 阅读 · 0 评论 -
用EXCEL一列数据拼接SQL的where条件in语句
比如Excel中有一列这样的数据,我们要将期拼接成 sql 语句的in条件:1,将该列数据隔壁插入一空列或直接复制到其它空表中,然后录入如下公式=","&A1&","2,然后填充,将生成的新列复制到word中或Notepad++中进行替换操作(勾选扩展)替换「换行符」为CRLF,即\r\n然后在查找目标中输入\r\n,即可匹配到文本中的回车换行符; 在替换为中输入要替换成的字符即可;参考:Notepad++中查找替换「换行符」...原创 2021-12-03 23:57:13 · 4543 阅读 · 0 评论 -
SQL检查表空间使用情况,释放删除数据后仍占用的空间
--SQL检查表空间使用情况 exec sp_spaceused --回收删除数据后仍然占用的表空间(收缩数据库 DBCC SHRINKDATABASE (GStation, 0);效果很明显。收缩前数据库mdf文件大小1.9GB大小,收缩后只有9M原创 2021-09-14 15:54:37 · 1119 阅读 · 0 评论 -
SQL 有选择性批量清空整个数据库但保留结构
DECLARE @TruncateSQL VARCHAR(80) DECLARE @iCount int=0 DECLARE name_cursor cursor for select 'Truncate Table '+ TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN('System','System2','Operator','OilDef','UserRoll','RollFunction'...原创 2021-09-14 14:30:22 · 186 阅读 · 0 评论 -
SQL死锁查询及处理,死锁知识了解
--SQL Server 查看死锁进程select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' --杀死死锁进程kill 59--显示死锁相关信息exec sp_who2 59所有死锁的原因可归结为资源的竞争表现一:一个用户A 访问表A(锁住了表A),然后又访问表B .原创 2021-09-12 12:09:59 · 7380 阅读 · 0 评论 -
SQL 时间戳生成及转换
--时间转13位毫秒级时间戳SELECT CONVERT(BIGINT,DATEDIFF(MI,'1970-01-01 00:00:00.000', GETUTCDATE())) * 60000 + DATEPART(S,GETUTCDATE()) * 1000 + DATEPART(MS, GETUTCDATE()) --13位毫秒级时间戳时间格式SELECT DATEADD (MS ,CONVERT(BIGINT,1631416248943) % 60000 ,DATEADD(MI,CONVE.原创 2021-09-12 11:11:37 · 5090 阅读 · 0 评论 -
SQL选择性快速删除大量数据千万亿级方法
--SQL选择性分批删除大量数据千万亿级DECLARE @OneCount intset @OneCount=100000 --每批删除的记录数10Wprint Convert(varchar(50),getdate(),120)while 1=1begin Delete Top(@OneCount) from TankMonitor where TnkM_GenTime<'2021-06-07 0:0:01'; if (@@RowCount<@OneCount).原创 2021-09-07 22:53:04 · 4385 阅读 · 0 评论 -
SqlServer中计算MD5值
-- 使用sqlserver自带的函数hashbytes()select hashbytes('MD5','hello') -- 计算'hello'字符串的md5值(同时还支持SHA1运算等)select sys.fn_VarBinToHexStr(hashbytes('MD5','hello')) --将md5值转换为16进制(以 0x 开头 16 进制形式的二进制数据)select substring(sys.fn_VarBinToHexStr(hashbytes('MD5','hello'.原创 2021-09-07 15:48:58 · 2949 阅读 · 0 评论 -
帐户当前被锁定,所以用户 sa 登录失败。系统管理员无法将该帐户解锁 解决方法
ALTER LOGIN sa ENABLE ;GOALTER LOGIN sa WITH PASSWORD = 'password' unlock, check_policy = off,check_expiration = off ;GO把用户名修改成报错的帐号,其中password中修改成sa的登陆密码,执行完成重新登陆就可以了。...原创 2021-07-12 14:51:09 · 1981 阅读 · 1 评论 -
SQL创建数据库提示“无法获得数据库 ‘model‘ 上的排他锁。请稍后重试该操作”处理方法
use master --选择数据库godeclare @sql varchar(100) while 1=1 begin select top 1 @sql = 'kill '+cast(spid as varchar(3)) from master..sysprocesses where spid > 50 and spid <> @@spid and dbid = db_id('model') if @@rowcount = 0 b...原创 2021-07-12 11:44:12 · 3414 阅读 · 0 评论 -
SQL 统计每日会员总数及每日新增数量
if object_id('tb') is not null drop table tbgocreate table tb(会员号 varchar(10),日期 varchar(10)) insert into tb values('1111' , '2020-05-02') insert into tb values('2222' , '2020-05-03') insert into tb values('3333' , '2020-05-03') insert into tb value.原创 2021-07-08 13:09:16 · 4880 阅读 · 2 评论 -
sql 除法计算一直 为0原因及解决方案
select 84/195 --返回结果为0 偶尔发现SQL Server中除法运算结果总是为0的现象,之所以称为现象,而不称为BUG,是因为实际上的运算结果并不是错误的通过这个例子可以看出来,语句的执行结果是0。这是因为SQL Server会自动根据除数与被除数的最大精度去对运算结果取精度,这里的除数和被除数都是整数,所以得到的结果也是整数。来验证一下这个结论:select 84.0/195 --0.430769通过上面的验证可以看出来,只要除数与被除数之中有一...原创 2021-07-08 10:00:37 · 12120 阅读 · 0 评论 -
SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句及解决方法
SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句:SELECT s2.dbid,s1.sql_handle,(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,( (CASE WHEN statement_end_offset = -1THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)ELSE statement_end_offset END...原创 2021-06-25 10:13:44 · 3711 阅读 · 0 评论 -
SQL对某字段进行GROUP BY同时要获取其他字段方法
--建表语句CREATE TABLE tb1( ikey int, value int, Test1 varchar(20) NULL, Test2 varchar(20) NULL,)drop table tb1SELECT * FROM tb1insert into tb1(ikey,value,Test1,Test2)values (1,55,'AA','BB'),(1,20,'AA1','BB1'),(4,63,'AA2','BB2'),(1,89,'AA3','BB3.原创 2021-06-12 17:08:10 · 5398 阅读 · 1 评论 -
SQL建索引提示:联机索引操作只能在 SQL Server Enterprise Edition 中执行 解决方法
错误信息:[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]联机索引操作只能在 SQL Server Enterprise Edition 中执行。 (1712)创建索引语句:CREATE NONCLUSTERED INDEX [Bill_BCopied_NIX] ON [dbo].[bill] (BCopied ASC) WITH (ONLINE = ON)解决方法:提示已经很明确了,方法有二种:1,升.原创 2021-05-13 09:39:18 · 1144 阅读 · 1 评论 -
sql server 中没有 create or replace 语法替代语法
IF EXISTS(SELECT * FROM sys.objects WHERE type='p' AND name='SyncDBStruct') DROP PROCEDURE SyncDBStructGOCREATE PROCEDURE SyncDBStructASBEGIN原创 2021-05-12 18:08:07 · 854 阅读 · 0 评论 -
SQL DDL一次性生成全库建表语句(包括字段默认值,主键约束等内容)
select 'CREATE TABLE [' + so.name + '] (' + o.list + ')' + CASE WHEN tc.Constraint_Name IS NULL THEN '' ELSE 'ALTER TABLE ' + so.Name + ' ADD CONSTRAINT ' + tc.Constraint_Name + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + ')' ENDfrom syso.原创 2021-05-11 23:58:44 · 361 阅读 · 0 评论 -
SQL DDL 生成建表语句(可自动生成主键约束,字段默认值等)
--获取建表DDL(+主键)declare @tabname varchar(50)set @tabname='CSBILL'--表名if ( object_id('tempdb.dbo.#t') is not null)beginDROP TABLE #tendselect 'create table [' + so.name + '] (' + o.list + ')' + CASE WHEN tc.Constraint_Name IS NULL THEN '' ELSE.原创 2021-05-11 21:52:44 · 1340 阅读 · 0 评论 -
SQL Left Join 多表连接一对多记录变多解决方案
方法1,修改表结构,设定唯一性的ID进行关联,比如UUID(这种情况一般PASS,因为没机会了)方法2:根据表的结构,用子查询或生成临时表方法。将1-3个能标识唯一且各表中相同的字段进行聚合生成一个新的唯一标识字段即可实现正确关联比如下图:我生成了两张临时表,将7-8张表中计算出的字段放到两张表中,然后两张表将具有共性的站点编号和油品名称进行聚合生成一个约束字段strict,用strict进行关联即可实现唯一性约定...原创 2021-04-26 23:31:02 · 4966 阅读 · 0 评论 -
SQL字符串分割方法
方法一:DECLARE @id VARCHAR(200)DECLARE @idlist VARCHAR(500) = '1,2,3,5,6,8,9,10,11,12,14,15,16,17,18,19,20'WHILE LEN(@idlist) > 0BEGIN IF CHARINDEX(',',@idlist) > 0 SET @id = SUBSTRING(@idlist,0,CHARINDEX(',',@idlist)) ELSE BEGIN .原创 2021-04-26 19:48:19 · 7031 阅读 · 0 评论 -
SQL Server分组连接并去重类似Mysql的Group_Concat功能实现
-- 建表CREATE TABLE TestA(id int, name varchar(10));-- 插入测试数据INSERT INTO TestA VALUES(1, 'aa');INSERT INTO TestA VALUES(1, 'bb');INSERT INTO TestA VALUES(1, 'bb');INSERT INTO TestA VALUES(1, 'eeac');INSERT INTO TestA VALUES(2, 'cc');INSERT INTO Test.原创 2021-04-17 00:28:11 · 1578 阅读 · 0 评论 -
SQL存储过程中多个参数如何做到当传入空值或null则不参与where and条件判断
原来的写法: where 油品流水号=@BFluid and 油品=@OilName and 收款来源=@PaySource and 单号=@DangHao and 商品名称=@GoodsName这样写即可where (油品流水号=@BFluid OR @BFluid IS NULL OR @BFluid='') and (油品=@OilName OR @OilName IS NULL OR @OilName='') and (收款来源=@PaySource OR...原创 2021-04-16 09:12:56 · 1620 阅读 · 1 评论 -
SQL如何通过企业管理器将数据库设置为单用户模式
将数据库设置为单用户模式 在对象资源管理器中,连接到SQLServer数据库引擎实例,然后展开该实例。 右键单击要更改的数据库,再单击“属性”。 在“数据库属性”对话框中,单击“选项”页。 在“限制访问”选项中,选择“单用户”。 如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。 还可以使用此过程将数据库设置为“多用户”访问或“限制”访问。通过命令则是:使数据库变为单用户模式ALTER ...原创 2021-04-09 21:22:21 · 574 阅读 · 0 评论 -
记一则SQL 数据库状态(可疑)(紧急)解决方案
错误信息如下:可以看到数据库CStation状态为可疑,导致原因为服务器意外停电,第一次遇到这种情况,折腾了很久终于解决,记下解决方案:1,将SQL数据库停止,不能停止就强制结束进程2,将SQL数据库服务由网络服务修改为本地服务(这个非常重要)(不做这一步,很多时候后面的一般都无法进行下去,往往各种无限时长的处理或卡死或失败。因为有可能会有意想不到的各种连接或同步程序秒连接,本人就是卡在这里:消息5070在其他用户正在使用数据库“”时无法更改数据库状态)3,使数据库变为紧急模式...原创 2021-04-09 21:18:16 · 14576 阅读 · 3 评论 -
SQL服务无法启动,状态停留在“启动”错误代码126解决方法
错误内容解决方案:在SQL Server 配置管理器中禁用VIA协议即可原创 2021-04-09 20:59:06 · 1981 阅读 · 0 评论 -
SQL计算两个日期间的所有月份(天数)列表
--SQL根据两个日期计算出中间所有的月份Select convert(varchar(10),DATEADD(mm,number,'2020-05-10' ),120) As 日期 From master.dbo.spt_valuesWhere Type='P' and DATEADD(mm,number,'2020-05-10' )<='2021-4-10' ORDER BY 日期-- 方法2declare @t1 datetime,@t2 datetime,@t3 datetim.原创 2021-04-07 21:39:47 · 7076 阅读 · 0 评论 -
SQL 同比、环比计算公式及实例演示
同比数据计算公式:同比:一般情况下是今年第n月与去年第n月比计算方式:同比增长率=(本期数-同期数)÷同期数×100%所以要有个本期数据与同期数据一一对应的表,那就要本期数据与同期数据分离环比数据计算公式:环比:一般是指报告期水平与前一时期水平之比,此处指本月数据与上月数据(或者本日数据与上日数据)计算方式:环比增长速度=(本期数-上期数)÷上期数×100%CREATE TABLE SalesDetail(ID int, --序号DepartName varchar(50),.原创 2021-04-02 00:14:21 · 13405 阅读 · 0 评论 -
关于spring中使用mysql数据库明明配置了事务管理却失效的原因及解决方法
直接点:你mysql数据库是否使用的MyISAM存储引擎?是的话,恭喜你:原因就是因为MyISAM引擎是不支持事务的有人跟我说Spring+mybatis事务回滚无效。刚刚开始我以为是他事务配置或者AOP切面定义有问题!谁知道,查了很久原因,最后才知道,居然是因为他使用的mysql而且还用的Mysql的MyISAM引擎。所以,以后如果还有人问你无法管理事务的问题,如果他还是用的Mysql,就先问他用的数据库存储引擎是什么吧,谢谢,使用mysql,只有InnoDB存储引擎支持事务处理 ...原创 2021-01-02 21:31:14 · 371 阅读 · 3 评论 -
mysql错误:java.sql.SQLException: The server time zone value ‘xxx‘ is unrecognized or represents 解决方法
错误内容:java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zo原创 2021-01-02 20:53:37 · 322 阅读 · 0 评论 -
idea提示Loading class `com.mysql.jdbc.Driver‘. This is deprecated. The new driver class is
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.处理方法:提示信息表明数据库驱动com.mysql.jd原创 2021-01-02 20:28:04 · 1070 阅读 · 0 评论 -
MySQL无法启动报 Error: could not open single-table tablespace file ./mysql/innodb_table_sta
MySQL无法启动报 Error: could not open single-table tablespace file ./mysql/innodb_table_sta从错误日志可以看出来是innodb引擎出了问题,在mysql的配置文件my.inn里找到 [mysqld]字段,添加 innodb_force_recovery=1即可强制修复,这种错误出现的原因一般都是数据库非正常关闭造成的。比如经常用任务管理器强制结束mysqld.exe进程。解决方法:# 服务端部分[mysqld]原创 2020-12-28 20:06:29 · 1343 阅读 · 0 评论 -
[42000]关键字 ‘UNION‘ 附近有语法错误。 (156) or > 1221 - Incorrect usage of UNION and ORDER BY
记一下,很久不写SQL语句了,今天又遇到这玩意,原来是UNION ALL不能跟ORDER BY一起用,除非是把ORDER BY放union语句的子查询里原创 2020-12-14 01:45:05 · 3139 阅读 · 0 评论 -
关于mysql数据库gbk编码转utf8的问题
查询mysql数据库编码类型-- 查询mysql 数据库编码类型:show variables like '%char%';Navicatmysql发现两个查出来的居然不一致,my.ini配置文件中已经是utf8了[mysql]#设置mysql客户端默认字符集default-character-set=utf8# 服务端部分[mysqld]# basedir表示mysql安装路径basedir=D:\ITQS\MySQL_x64_5.6.27\# da原创 2020-11-28 23:10:25 · 762 阅读 · 0 评论 -
动态菜单/RBAC标准完整权限管理系统的实现,通用角色权限控制系统五张表逻辑关联设计实现
序言:众所周知,权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,,现在整理了下,给正在开发此模块的朋友一个思路! 设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表关联上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。 大致用到5张表:用户表(s_user)、角色表(s_role)、菜单表(s_menu)、用户角色表(s_user_role)、角色菜单表(s_role_menu)<注:表前加前缀s代表这原创 2020-11-15 18:15:11 · 8143 阅读 · 11 评论