SQL Server 2022本地数据库工程实战指南
简介本资源是太原理工大学软件工程专业《数据库概论》课程配套的完整实验报告面向高校数据库初学者及SQL实践者聚焦SQL Server 2016环境下数据库对象管理与核心操作能力训练。报告覆盖数据定义CREATE/ALTER/DROP TABLE、索引创建唯一/聚簇索引、视图构建如IS_Student系别筛选视图及DML操作INSERT/UPDATE/SELECT多场景示例含详细语句执行过程、约束说明与注意事项助力读者夯实数据库建模与查询优化基础。资源为单个Word文档.docx大小1.69MB内容结构清晰含实验目的、平台配置、分步代码、结果验证及总结反思便于对照学习与课堂复盘。已有311人下载学习适合课程复习、实验预习或SQL实操自查。1. 这不是“抄答案”的实验报告而是用 SQL Server 搭建真实数据库工程能力的起点在太原理工大学软件工程专业《数据库概论》实验课常被学生误读为“写几条 SELECT 就交差”的环节——但翻看近年课程大纲和头歌实训平台实际题型你会发现从创建带约束的学生成绩表、实现跨系部选课事务控制、到用 T-SQL 编写存储过程批量处理补考数据所有实验都锚定一个核心目标让本科生第一次亲手把“关系模型”变成可运行、可验证、可调试的 SQL Server 实例。这不是纸上谈兵的范式转换练习而是用 Microsoft SQL Server 2022RTM本地部署环境完成从 DDL 建模 → DML 操作 → DCL 权限控制 → T-SQL 逻辑封装的全链路闭环。适合刚学完《软件工程导论》第六版第 7 章、正准备课程设计或保研面试中被问“你做过什么数据库项目”的同学——你不需要会 Python 或 Java但必须能独立解决[08001] SSL 提供程序: 证书链是由不受信任的颁发机构颁发的这类报错并理解为什么DEFAULT NEWID()在主键上比IDENTITY(1,1)更贴近真实业务场景。2. 用 SQL Server 2022 (RTM) 搭建本地实验环境从安装到 SSMS 连接验证2.1 安装 SQL Server 2022 (RTM) - 16.0.1000.6 (x64) 的关键选项选择太原理工大学实验室普遍采用 Windows 10/11 教育版 SQL Server 2022 标准版学生可免费申请 Developer 版安装时必须避开默认全选的“功能选择”陷阱。常见翻车点是勾选了“SQL Server Reporting Services”或“Full-Text Search”导致安装失败率飙升尤其在校园网 DNS 不稳定环境下。正确做法是实例配置选择“默认实例”而非命名实例避免后续连接字符串写成localhost\SQLEXPRESS这类易错格式服务器配置将“SQL Server 服务”与“SQL Server 代理服务”的登录账户均设为NT AUTHORITY\NETWORK SERVICE非“内置账户”或“本地系统”这是解决[08001] 客户端无法建立连接的底层前提数据库引擎配置身份验证模式必须选“混合模式SQL Server 身份验证和 Windows 身份验证”并手动设置 sa 密码至少 8 位含大小写字母数字如TaYuan2024!否则后续实验中创建登录用户、分配角色将全部卡死忽略“Machine Learning Services”和“PolyBase”这两项对本科实验完全冗余且极易因 VC 运行库版本冲突导致安装中断。提示安装包体积约 3.2GB建议提前下载离线镜像SQL2022-SSEI-Dev.exe避免安装中途因校园网限速断连。若提示“对秘钥无访问权限”说明当前 Windows 用户未加入Administrators组——请右键安装程序 → “以管理员身份运行”。2.2 配置 SSMS 18.10 连接并修复 SSL 加密报错安装完成后需用 SQL Server Management StudioSSMS18.10非旧版 17.x连接本地实例。但多数同学首次连接即遭遇[08001] [Microsoft][ODBC Driver 17 for SQL Server] SSL 提供程序: 证书链是由不受信任的颁发机构颁发的 (-2146893019)。这不是证书问题而是 SQL Server 默认启用强制加密而本地自签名证书未被 Windows 信任。血泪经验不要去导出/导入证书直接关掉加密即可-- 在 SSMS 中以 sa 登录后执行以下命令禁用强制加密仅限实验环境 USE master; GO EXEC sp_configure show advanced options, 1; RECONFIGURE; GO EXEC sp_configure force encryption, 0; RECONFIGURE; GO -- 验证是否生效 SELECT name, value_in_use FROM sys.configurations WHERE name force encryption;执行后重启 SQL Server 服务通过 Windows 服务管理器或net stop MSSQLSERVER net start MSSQLSERVER。此时用 SSMS 连接时服务器名称填localhost或.身份验证选“SQL Server 身份验证”登录名sa密码为你安装时设置的密码——连接成功后对象资源管理器中应可见master、model、msdb、tempdb四个系统数据库。注意force encryption 0是实验环境安全妥协方案。若课程要求演示加密连接如头歌平台某题需额外配置证书并修改客户端连接字符串添加Encryptyes;TrustServerCertificateyes;但该操作复杂度远超本科实验范围此处不展开。3. 实验报告核心模块落地从建表约束到事务控制的 T-SQL 实战3.1 创建符合教科书规范的“学生-课程-成绩”三表结构《数据库概论》实验报告首项任务必是建表。但很多同学照着课本写CREATE TABLE Student (...)却忽略太原理工实际教学要求所有主键必须用UNIQUEIDENTIFIER类型 DEFAULT NEWID()外键必须显式声明ON DELETE CASCADE且每个表需含CreatedTime DATETIME2 DEFAULT GETDATE()审计字段。这是为后续课程设计如教务系统预留扩展性也是区别于“玩具数据库”的关键标志。以下是标准脚本-- 创建 Student 表注意主键非 INT IDENTITY CREATE TABLE Student ( StudentID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), StudentNo CHAR(10) NOT NULL UNIQUE, -- 学号固定10位如 2022000001 Name NVARCHAR(20) NOT NULL, Gender CHAR(2) CHECK (Gender IN (男, 女)), BirthDate DATE, Department NVARCHAR(30), CreatedTime DATETIME2 DEFAULT GETDATE() ); -- 创建 Course 表 CREATE TABLE Course ( CourseID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), CourseCode CHAR(8) NOT NULL UNIQUE, -- 课程代码如 CS1001001 CourseName NVARCHAR(50) NOT NULL, Credit TINYINT CHECK (Credit BETWEEN 1 AND 6), Department NVARCHAR(30), CreatedTime DATETIME2 DEFAULT GETDATE() ); -- 创建 Score 表外键级联删除模拟真实业务删课程则清空所有成绩 CREATE TABLE Score ( ScoreID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), StudentID UNIQUEIDENTIFIER NOT NULL, CourseID UNIQUEIDENTIFIER NOT NULL, Score DECIMAL(5,2) CHECK (Score BETWEEN 0 AND 100), ExamDate DATE DEFAULT GETDATE(), CreatedTime DATETIME2 DEFAULT GETDATE(), CONSTRAINT FK_Score_Student FOREIGN KEY (StudentID) REFERENCES Student(StudentID) ON DELETE CASCADE, CONSTRAINT FK_Score_Course FOREIGN KEY (CourseID) REFERENCES Course(CourseID) ON DELETE CASCADE );参数说明UNIQUEIDENTIFIER DEFAULT NEWID()比INT IDENTITY更符合分布式系统思维避免主键暴露业务量如20240001显露当年招生数且NEWID()生成全局唯一值适配未来可能的分库分表CHAR(10)vsVARCHAR(10)学号长度固定用CHAR减少存储碎片提升索引效率DATETIME2精度达 100 纳秒比DATETIME更精确且兼容性优于DATETIMEOFFSETON DELETE CASCADE教务系统中删除一门停开课程时自动清理关联成绩避免孤儿数据——这是事务一致性的基础保障而非可选项。3.2 用 T-SQL 存储过程实现“批量补考成绩录入”业务逻辑实验报告高阶任务常要求编写存储过程。以“某班 30 名学生补考需统一录入 60 分并标记为补考”为例手写 30 条INSERT易出错且无法保证原子性。正确解法是创建带事务控制的存储过程CREATE PROCEDURE InsertMakeupScores ClassID CHAR(10), -- 班级编号如 2022CS01 CourseCode CHAR(8), -- 课程代码 DefaultScore DECIMAL(5,2) 60.00 AS BEGIN SET NOCOUNT ON; BEGIN TRY BEGIN TRANSACTION; -- 步骤1获取课程ID防代码输错 DECLARE CourseID UNIQUEIDENTIFIER; SELECT CourseID CourseID FROM Course WHERE CourseCode CourseCode; IF CourseID IS NULL THROW 50000, 课程代码不存在请检查 CourseCode 参数, 1; -- 步骤2获取该班级所有学生ID DECLARE StudentIDs TABLE (StudentID UNIQUEIDENTIFIER); INSERT INTO StudentIDs (StudentID) SELECT StudentID FROM Student WHERE LEFT(StudentNo, 6) ClassID; -- 学号前6位为班级号 -- 步骤3批量插入成绩用 MERGE 避免重复插入 MERGE Score AS target USING StudentIDs AS source ON target.StudentID source.StudentID AND target.CourseID CourseID WHEN NOT MATCHED THEN INSERT (StudentID, CourseID, Score, ExamDate) VALUES (source.StudentID, CourseID, DefaultScore, GETDATE()); COMMIT TRANSACTION; PRINT 补考成绩录入成功共 CAST(ROWCOUNT AS VARCHAR) 条记录; END TRY BEGIN CATCH ROLLBACK TRANSACTION; DECLARE ErrorMessage NVARCHAR(4000) ERROR_MESSAGE(); RAISERROR(ErrorMessage, 16, 1); END CATCH END;执行示例与验证-- 调用存储过程假设班级 2022CS01 已有28名学生课程 CS1001001 存在 EXEC InsertMakeupScores ClassID 2022CS01, CourseCode CS1001001; -- 验证查该课程补考记录 SELECT s.StudentNo, st.Name, sc.Score, sc.ExamDate FROM Score sc JOIN Student s ON sc.StudentID s.StudentID JOIN Course c ON sc.CourseID c.CourseID WHERE c.CourseCode CS1001001 AND sc.ExamDate CAST(GETDATE() AS DATE);关键设计点MERGE语句替代INSERT ... SELECT防止同一学生多次调用时重复插入THROW自定义错误比RAISERROR更简洁且能终止执行LEFT(StudentNo, 6) ClassID利用学号编码规则前6位年级专业班级快速定位学生比关联班级表更高效SET NOCOUNT ON关闭影响行数消息避免 SSMS 输出干扰。4. 避坑指南太原理工实验报告中最常踩的 4 个 T-SQL 实操雷区4.1 现象执行INSERT INTO Student VALUES (...)报错 “列名或所提供值的数目与表定义不匹配”原因未显式指定列名且表含DEFAULT字段如CreatedTime或IDENTITY字段本实验中已禁用IDENTITY但部分同学误建表。SQL Server 要求VALUES列数必须与表列数严格一致哪怕有DEFAULT。解决永远显式写出列名——INSERT INTO Student (StudentNo, Name, Gender) VALUES (2022000001, 张三, 男);4.2 现象SELECT * FROM Student WHERE Name 张三查不到数据但用SELECT LEN(Name), DATALENGTH(Name) FROM Student发现LEN返回 2DATALENGTH返回 6原因NVARCHAR字段存入中文时若客户端如 SSMS未设置SET ANSI_NULLS ON或SET QUOTED_IDENTIFIER ON可能导致隐式转换异常更常见的是复制粘贴时混入不可见空格如全角空格。解决用RTRIM(LTRIM(Name)) N张三清洗且所有字符串比较必须加N前缀N张三否则 SQL Server 视为VARCHAR导致 Unicode 匹配失败。4.3 现象创建存储过程后执行EXEC proc_name提示 “找不到对象”原因未指定架构名。SQL Server 默认架构是dbo但若在创建时写了CREATE PROCEDURE mydb.proc_name则必须用EXEC mydb.dbo.proc_name调用更隐蔽的是SSMS 当前连接的数据库不是mydb导致解析失败。解决创建时省略数据库名只写CREATE PROCEDURE dbo.InsertMakeupScores执行前确认 SSMS 左上角数据库下拉框选中目标库如SchoolDB。4.4 现象UPDATE Score SET Score 100 WHERE StudentID xxx执行后ROWCOUNT返回 0但SELECT * FROM Score WHERE StudentID xxx确实存在该记录原因StudentID是UNIQUEIDENTIFIER类型传入的xxx是字符串SQL Server 会尝试隐式转换。若字符串格式非法如含非十六进制字符转换失败返回NULL导致WHERE条件恒假。解决所有UNIQUEIDENTIFIER字段的 WHERE 条件必须用CONVERT(UNIQUEIDENTIFIER, xxx)或CAST(xxx AS UNIQUEIDENTIFIER)显式转换例如UPDATE Score SET Score 100 WHERE StudentID CONVERT(UNIQUEIDENTIFIER, A1B2C3D4-E5F6-7890-G1H2-I3J4K5L6M7N8);5. 实验报告进阶技巧用查询计划验证索引有效性与慢 SQL 优化5.1 为高频查询字段添加复合索引不只是CREATE INDEX实验报告常要求“优化查询性能”。但很多同学只执行CREATE INDEX IX_Student_Department ON Student(Department)却忽略真实场景教务系统最常查的是“计算机学院男生按出生日期排序”。此时单列索引无效必须建覆盖索引Covering Index-- 创建覆盖索引包含查询所有字段避免 Key Lookup CREATE NONCLUSTERED INDEX IX_Student_Dep_Gender_Birth ON Student(Department, Gender) INCLUDE (Name, BirthDate, StudentNo) WITH (DROP_EXISTING ON);验证效果在 SSMS 中打开“显示实际执行计划”CtrlM执行SELECT Name, StudentNo, BirthDate FROM Student WHERE Department N计算机学院 AND Gender N男 ORDER BY BirthDate DESC;观察执行计划若出现Index Seek而非Index Scan且无Key Lookup图标则索引生效若仍有Table Scan说明Department和Gender的选择性太低如全院90%是男生需调整索引列顺序或增加筛选条件。5.2 用STATISTICS IO定位 I/O 瓶颈比“执行时间”更真实的慢 SQLSET STATISTICS IO ON比看“耗时毫秒数”更能暴露本质问题。例如某次实验要求“查询每门课平均分”同学写SELECT c.CourseName, AVG(s.Score) FROM Course c JOIN Score s ON c.CourseID s.CourseID GROUP BY c.CourseName;开启STATISTICS IO后发现logical reads高达 12000远超数据行数。原因Score表无CourseID索引导致JOIN时全表扫描。解决方案-- 在 Score 表的外键列上建索引必须 CREATE NONCLUSTERED INDEX IX_Score_CourseID ON Score(CourseID);再次执行logical reads降至 200 以内——这才是数据库工程师真正盯的指标。5.3 实验报告中的“性能对比表格”怎么写才专业不要只写“优化前 2.3s优化后 0.15s”。评审老师要看的是可复现、可验证的量化证据。按此模板填写查询场景执行计划类型logical readsphysical readsCPU time (ms)elapsed time (ms)索引使用SELECT * FROM Student WHERE Department计算机学院Index Scan184201245无索引同上添加IX_Student_Dep后Index Seek12001IX_Student_Dep我的习惯每次优化后用DBCC FREEPROCCACHE清空缓存再测三次取平均值避免缓存干扰。曾因没清缓存在头歌平台提交报告被扣分——缓存让慢 SQL “假装快”这是最隐蔽的翻车点。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

IEEE投稿必看:PDF字体未嵌入(font not embedded)的三种修复方法

IEEE投稿必看:PDF字体未嵌入(font not embedded)的三种修复方法

写IEEE的论文,投稿前那一关总是让人又爱又恨。爱的是流程越来越规范,恨的是PDF eXpress校验总能在最后一刻搞心态。我见过太多人卡在font not embedded这个提示上,明明PDF打开看着好好的,偏偏校验就是不通过。如果你是第一次碰到这…

2026/10/2 20:34:03 阅读更多 →
百考通输入完整标题,智能生成优质综述

百考通输入完整标题,智能生成优质综述

在学术研究的道路上,文献综述是承前启后的关键环节,它既是对领域内已有研究的系统梳理,也是确立自身研究创新点的核心基础。然而,海量文献的筛选、观点的整合、逻辑的搭建,往往让科研工作者与学生耗费大量时间与精力。…

2026/10/2 20:34:03 阅读更多 →
Cocos MCP 下载与安装教程:Funplay MCP for Cocos 让 AI 直接操作 Cocos Creator

Cocos MCP 下载与安装教程:Funplay MCP for Cocos 让 AI 直接操作 Cocos Creator

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 20:33:03 阅读更多 →

最新新闻

LSTM时间序列预测实战:Python完整实现与调参指南

LSTM时间序列预测实战:Python完整实现与调参指南

简介:Python基于LSTM神经网络的时间序列预测项目,面向机器学习初学者、数据分析师以及需要做预测建模的开发者,解决时间序列数据清洗、特征构造与回归预测等实际问题。模型基于TensorFlow和Keras接口搭建,采用LSTM循环神经网络&am…

2026/10/2 21:08:22 阅读更多 →
Vue3大文件分块上传实战:从切片到断点续传

Vue3大文件分块上传实战:从切片到断点续传

做了多年前端,跟“文件上传”死磕的次数实在不少。尤其是这两年做后台管理系统和数据中台项目,动不动就是几个G的日志、压缩包、数据库备份。直接把文件怼到FormData里再post上去?要么浏览器内存直接告警,要么后端接口超时崩溃&am…

2026/10/2 21:08:22 阅读更多 →
解析错误排查:DOM ParseError Obj 的核心场景与避坑指南

解析错误排查:DOM ParseError Obj 的核心场景与避坑指南

上周在处理一个混合型前端项目时,控制台突然抛出一条让我懵了几秒的错误:“DOM ParseError Obj”。报错信息不长,但排查起来牵扯出的问题却一点都不少——先是怀疑手写的 DOMParser 解析逻辑,又怀疑后端返回的 JSON 序列化数据&am…

2026/10/2 21:08:22 阅读更多 →
Canvas画圆点避坑指南:从坐标、arc到粒子动画与高清屏优化

Canvas画圆点避坑指南:从坐标、arc到粒子动画与高清屏优化

我第一次用Canvas画圆点是在做一个小工具的时候。需求特别简单:用户在页面上每点一下,就在对应位置留下一个圆点。当时我觉得半小时就能搞定,结果足足折腾了两天。一开始是画不出圆,后来是坐标对不上,再后来发现屏幕上…

2026/10/2 21:08:22 阅读更多 →
Oracle EBS各模块流程图实战:从业务蓝图到开发落地

Oracle EBS各模块流程图实战:从业务蓝图到开发落地

简介:这份《oracleEBS各模块流程图》Word完整版,适合ERP实施顾问、财务与供应链关键用户及企业信息化管理者参考,用于快速建立Oracle EBS整体模块框架与业务流程认知。内容从财务系统、分销系统、制造系统到其他系统模块逐层展开,…

2026/10/2 21:08:22 阅读更多 →
YOLO26涨点改进| ECCV 2026 | 独家注意力改进篇| 引入 RELA秩增强线性注意力机制,不需要传统全局自注意力的高计算开销,适合图像恢复、小目标、遮挡目标、密集目标检测任务,有效涨点

YOLO26涨点改进| ECCV 2026 | 独家注意力改进篇| 引入 RELA秩增强线性注意力机制,不需要传统全局自注意力的高计算开销,适合图像恢复、小目标、遮挡目标、密集目标检测任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 RELA秩增强线性注意力模块 改进YOLO26网络模型,RELA利用其秩增强线性注意力提升全局上下文建模能力和特征表达多样性,使检测特征在保持较低计算复杂度的同时获得更丰富的空间关系信息;相比普通线性注意力,RELA通过轻量级深度卷积补充…

2026/10/2 21:07:22 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →