数据库水平切表/分表后,基于FreeSql的数据操作方法

1、对聊天记录进行数据存取,但长年累月的消息数据都存储在同一个表内,累积的数据越来越多,数据读取的效率会受影响。2、设计以CreateTime字段为分表依据,按CreateTime的月份数值进行分表,不同月份的数据存入不同的表内3、建立接口,对要分表的实体模型进行字段约束,所有要分表的实体都必须具备该属性 public interface IMonthSeparatedModel { public DateTime CreateTime { get; set; } }4、建立Message类,并实现接口中的必须具备属性,在各个属性上标注数据库中对应的数据类型,这样FreeSql在根据不同月份自动建表时,会依照...


阅读正文

SQL中根据特定节点,获取其所有子级节点、父级节点

1. 根据特定节点,获取其下属的所有子级节点WITH temp AS ( SELECT * FROM [表名] WHERE Id=9999 --主键Id=9999 UNION ALL SELECT t.* FROM temp, [表名] AS t WHERE temp.Id=t.ParentId --子级Id=父级Id ) SELECT * FROM temp;2. 根据特定节点,获取其所有父级节点WITH temp AS ( SELECT * FROM [表名] WHERE Id=9999 --主键Id=9999 UNION ALL SELECT t.* FROM temp, [表名] AS t WHERE temp.ParentId=t.Id --父级Id=子级Id ) SELECT * FROM temp;


阅读正文

SQL Server中SQL语句的执行记录

SELECT TOP 1000 ST.text AS '执行的SQL语句' , QS.execution_count AS '执行次数' , QS.total_elapsed_time / 10000 AS '耗时' , QS.total_logical_reads AS '逻辑读取次数' , QS.total_logical_writes AS '逻辑写入次数' , QS.total_physical_reads AS '物理读取次数' , QS.creation_time AS '执行时间' , ST.*, QS.* FROM sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST ORDER BY creatio...


阅读正文

使用SQL语句恢复数据库

偶遇一次使用备份文件恢复SQL Server数据库,在数据库管理工具中选择备份文件盘符时,工具卡死;无奈之下使用SQL语句恢复数据库。由于数据库原始文件名和数据库名不一致,所以在SQL语句中采用MOVE……TO……关键词,将原始文件名指定到当前数据库文件存放路径。SQL语句记载如下:RESTORE DATABBASE [DbName] --指定要恢复的数据库名 FROM DISK='E:\20180404.bak' --指定备份文件存放目录 WITH REPLACE, --覆盖现有数据库 MOVE 'DbOriginalFileName' TO 'C:\Program files\Microsoft SQL Server\MSSQL14.MSSQLSERVER20...


阅读正文

SQL Server中关联多表、带有聚合函数的更新(Update)语句

最近忙于公司产品和项目,很有没有写博客了,碰巧今天遇上一个问题,纠结了比较久,在网上搜索了一些资料最终得出解决方案。业务场景如下:考生表tblUser:标识列(Id)姓名(Name)总分(TotalScore)1张三NULL2李四NULL3王五NULL得分表tblScore:考生标识列(UserId)姓名(Name)科目(Subject)得分(Score)1张三数学861张三语文992李四数学982李四语文853王五数学593王五语文51我们需要使用SUM()和GROUP把附表B中的总分累加起来,赋值给主表A中的总分。1. 先查询考生表中的数据,遍历所有考生,将考生总分查询出来,单条更新到考生表中。此方法执行效率很低下,遍...


阅读正文

SQL Server还原数据库的SQL语句,可用于定时作业中定时还原数据库

USE master --设置数据库离线后再在线,避免数据库正在使用占用进程 ALTER DATABASE [数据库名] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE [数据库名] SET ONLINE --开始恢复 RESTORE DATABASE [数据库名] FROM DISK='D:\还原文件\数据库\备份文件名.bak' WITH REPLACE --覆盖还原 --授权用户 ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [数据库用户名]以下是《SQL Server备份数据库的SQL语句,可用于定时作业中定时备份数据库》


阅读正文

SQL Server执行大脚本时提示“内存不足,没有足够的内存继续执行程序”解决办法

在SQL Server中运行大容量脚本,系统提示“内存不足,没有足够的内存继续执行程序”,该如何解决呢?1. 提示如图:2.我们可以通过命令行来进行导入,命令如下图: osql -E -i D:\脚本文件.sql以上命令即可运行脚本了,如果要记录运行过程中的脚本执行日志,则可以使用-o参数来保存执行日志,如下:osql -E -i D:\脚本文件.sql -o D:\执行日志文件.txt3.osql的其它参数如下,可供参考:


阅读正文