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的其它参数如下,可供参考:


阅读正文

“数据类型 ntext 和 nvarchar 在 equal to 运算符中不兼容”的解决办法

在SQL中判断ntext字段是否等于指定值,报错“数据类型 ntext 和 nvarchar 在 equal to 运算符中不兼容”,先上SQL语句报错截图:如以上SQL语句,'123'在数据库中是varchar格式的,和ntext字段是完全不同的,所以无法进行比较。于是就报出了错误“数据类型 ntext 和 nvarchar 在 equal to 运算符中不兼容”,那么如何解决这个问题呢? 1. 在数据结构允许的情况下,直接将数据库中将ntext改成varchar或者nvarchar 2. 在业务逻辑允许的情况下,将等于判断改为LIKE模糊匹配,如:SELECT * FROM tblTest WHERE myContent LIKE '%123%' 3. 修改SQ...


阅读正文