SQL Server Interview Questions

SQL Server 面试问题

2025年3月16日 | 16分钟阅读

以下列出了最常问的 SQL Server 面试问题和答案。

1) 什么是 SQL Server?

SQL Server 是微软提供的 RDBMS 系统,其主要功能是根据用户请求检索和存储数据。有时它被错误地称为 SQL,但两者是不同的,因为 SQL 是一种语言,而 SQL Server 是支持 SQL 的微软产品。


2) 什么是范式化?

在 RDBMS 中,组织数据以最小化冗余并确保逻辑数据完整性的过程称为范式化。在范式化中,数据库被分成两个或多个表,并在表之间定义关系。范式化技术提高了数据库的性能。

范式化的类型

使用的范式化类型如下:

  • 1NF
  • 2NF
  • 3NF
  • BCNF
  • 4NF
  • 5NF

然而,前三种类型是唯一常用的,其中“NF”代表范式。RD 模型“E.F Codd”的创始人提出了“范式化”过程,从第一范式开始,一直到第三范式。


3) 什么是反范式化?

它是一种通过添加冗余数据来优化数据库性能的过程。在表中故意引入冗余以提高性能,这称为反范式化。反范式化过程提高了读取性能,同时写入性能会略有下降。可以通过以冗余形式对数据进行分组来实现。未范式化和反范式化数据库完全不同。在对任何数据库进行反范式化之前,应首先对其进行范式化。


4) 函数和存储过程有什么区别?

  • 函数必须返回一个值,而存储过程可以返回零个或 n 个值。
  • 函数只能有输入参数,而过程可以有输入/输出参数。
  • 函数接受一个强制输入参数,而存储过程可以接受 0 到 n 个输入参数。
  • try-catch 块可以处理存储过程中的异常,而不能在函数中使用 try-catch。

5) 什么是排序规则敏感度?解释不同类型。

排序规则敏感度用于定义字符数据字符串的排序和比较规则。字符数据排序的基本规则是正确的字符序列、大小写敏感度、字符宽度和重音符号等。

不同类型的排序规则敏感度

  • 大小写敏感度
  • 重音敏感度
  • 假名敏感度
  • 宽度敏感度

大小写敏感度:大小写敏感度为每个字符定义一个唯一值,因为字母字符 A 和 a 被单独处理,因为它们在计算机语言中具有不同的 ASCII 值

重音敏感度:重音敏感度与重音是否关闭有关,因为 a 和 á 都应区别对待

假名敏感度:假名敏感度定义了日语中两种文字之间的区别:平假名和片假名

宽度敏感度:它区分单字节字符(半角)和相同字符的双字节表示


6) 什么是备用服务器?

备用服务器是一种服务器,当主服务器脱机且应用程序需要服务器的持续可用性时,它会联机。始终需要一种可以将主服务器切换到辅助或备用服务器的机制。

备用服务器有三种类型

热备用:热备用方法是一种冗余方法,其中主备用系统同时运行,因此数据也实时存在于辅助服务器中,这样两个系统都包含相同的信息。

温备用:温备用是一种冗余方法,其中辅助系统在主系统的后台运行。数据以固定间隔镜像到辅助服务器,因此在此方法中有时两个服务器不包含相同的数据。

冷备用:冷备用是一种冗余方法,其中辅助服务器仅在主服务器出现故障时才被调用。冷备用系统用于数据不经常更改或非关键应用程序的情况。在冷备用中,主服务器被备用服务器物理替换。


7) 聚集索引和非聚集索引有什么区别?

聚集索引:聚集索引是一种特殊的索引类型,它重新排列了表中记录的物理存储方式。它提供了物理存储在数据库中的数据序列。因此,一个表只能有一个聚集索引。聚集索引的叶节点包含数据页。聚集索引的索引 ID 为 0。因此,主键约束会自动创建聚集索引。

非聚集索引:非聚集索引是一种特殊的索引类型,其中索引的逻辑顺序与磁盘上行的物理存储顺序不匹配。在非聚集索引中,数据和索引存储在不同的位置。非聚集索引的叶节点不包含数据页。相反,叶节点包含索引行。非聚集索引的索引 ID 大于 0。


8) SQL Server 中 HAVING 子句和 WHERE 子句有什么区别?

HAVING 子句:HAVING 子句仅与 SELECT 语句一起使用。它通常在查询的 GROUP BY 子句中使用。

如果未使用 GROUP BY,HAVING 的作用类似于 WHERE 子句。HAVING 子句可以与聚合函数一起使用。

语法

WHERE 子句:WHERE 子句在行成为查询中 GROUP BY 函数的一部分之前应用于每一行。'WHERE' 子句不能与聚合函数一起使用。

语法


9) SQL Server 中的递归存储过程是什么?

递归存储过程定义为一种问题解决方法,其中解决方案重复出现。SQL Server 支持自调用的递归存储过程。它可以嵌套最多 32 级。它可以直接或间接自调用

有两种方法可以在存储过程中实现递归

  • 相互递归:通过使用相互递归存储过程,可以实现间接递归
  • 链式递归:如果我们扩展相互递归过程,就可以实现链式递归。

10) 在 SQL Server 中使用存储过程有什么优点?

存储过程的优点列表

  • 存储过程有助于减少网络流量和延迟。它提高了应用程序性能。
  • 存储过程方便了代码的重用。
  • 存储过程为数据提供了更好的安全性。
  • 您可以使用存储过程封装逻辑,并在不影响客户端的情况下更改存储过程代码。
  • 可以重用存储过程执行计划,这些计划缓存到 SQL Server 的内存中。这减少了服务器开销。
  • 它提供了应用程序的模块化。

11) 在设计表时定义一对一关系。

一对一关系:它可以实现为单个表,很少实现为具有主键和外键关系的两个表。

如果一个表中的实体只与另一个表中的一个实体有链接,则存在一对一关系。让我们以员工及其员工 ID 为例,这样在另一个表中将为特定员工提供唯一的员工 ID。


12) 如何隐藏 SQL Server 实例?

您必须在 SQL Server 配置管理器中进行更改才能隐藏 SQL Server 实例。

按照以下说明启动 SQL Server 配置管理器并执行以下操作

  • 选择 SQL Server 实例。
  • 右键单击并选择属性。
  • 选择属性后,您只需将“隐藏实例”设置为“是”,然后单击“确定”或“应用”。
  • 更改后,您需要重新启动 SQL Server 实例,以避免暴露实例名称。

13) SQL Server 中的 CHECK 约束是什么?

CHECK 约束应用于表中的列,以限制可以放入列中的值。它强制执行完整性。在单个列上使用 CHECK 约束后,我们只能为该特定列提供一些特定值。CHECK 约束对表中的每一列应用条件。

例子


14) SQL Server 代理是什么意思?

SQL Server 代理在 SQL Server 管理员 (DBA) 的日常任务中扮演着至关重要的角色。它是 Microsoft SQL Server 的重要组成部分之一。服务器代理的目的是通过调度引擎轻松实现任务,该引擎允许我们的作业在预定的日期和时间运行。SQL Server 代理使用 SQL Server 存储计划管理任务信息。


15) SQL Server 中的 COALESCE 是什么?

COALESCE 用于返回参数中的第一个非空表达式。此函数用于从参数中的多个列返回非空值。COALESCE 接受所有值,但它只返回表达式中存在的非空值。

语法


16) SQL Server 在哪个 TCP/IP 端口上运行?可以更改吗?

SQL Server 在端口 1433 上运行。是的,可以从网络实用程序 TCP/IP 属性中更改它。


17) SQL Server 中的身份验证模式有哪些?如何更改?

身份验证模式用于在 SQL Server 中对用户进行身份验证,可以在设置数据库引擎时选择。

SQL Server 支持两种身份验证模式:Windows 身份验证模式和混合模式。

Windows 身份验证模式:此身份验证模式用于通过 Microsoft NT 4.0 或 Windows 2000 用户帐户进行连接。在 Windows 身份验证中,服务器将计算机的用户名和密码用于身份验证目的。在此模式下,SQL Server 身份验证模式被禁用。

混合模式:它用于使用 Windows 身份验证或 SQL Server 身份验证连接到 SQL Server 实例。在 SQL Server 身份验证模式中,特定数据库需要唯一的用户名和密码,因为它不依赖于 Windows 帐户。


18) 什么是 SQL Server Profiler?

Microsoft SQL Server Profiler 是一种图形用户界面,允许系统管理员监视数据库引擎的事件。SQL Server Profiler 跟踪将每个事件监视到一个文件。SQL Profiler 可用于实时监视数据或用于未来数据分析。

您可以使用 SQL Server Profiler 执行以下操作:

您可以创建跟踪。

您可以在跟踪运行时查看跟踪结果。

您可以将跟踪结果存储在表中。

您可以找出查询中的错误并进行诊断。

如有必要,您可以启动、停止、暂停和修改跟踪结果。


19) 什么是 SQL Server 代理?

SQL Server 代理是 Microsoft SQL Server 的一个组件。它是 Microsoft SQL Server 的后台工具,因此它作为 Windows 服务在后台持续运行。SQL Server 代理允许数据库管理员处理自动化任务和计划作业。它运行 Windows 服务,因此可以在系统启动时自动启动,或者您可以手动启动它。


20) 什么是“计划作业”或“计划任务”?

计划任务允许您以自动化方式管理按常规或可预测周期运行的任务。您可以计划管理任务,还可以确定任务的运行顺序。


21) 什么是 DBCC 命令以及它为什么被使用?

DBCC 代表数据库一致性检查器。此命令用于检查数据库的一致性。DBCC 命令有助于检查和监视表、数据库的维护,以及验证对数据库执行的操作等。例如

DBCC CHECKDB:它确保数据库中的表和索引正确链接。

DBCC CHECKALLOC:它检查数据库中的所有页面,并确保所有页面都正确分配。

DBCC CHECKFILEGROUP:它检查所有表文件组是否存在任何损坏。

如果用户执行上述命令,数据库引擎会创建一个数据库快照,并使其保持一致的事务状态。之后,它对存储的数据库快照运行检查,并在命令完成后删除快照。


22) 用于重命名数据库的命令是什么?

sp_renamedb 'oldname', 'newname';


23) SQL Server 可以与其他服务器(如 Oracle)链接吗?

是的,它可以链接到任何服务器。它有 Microsoft 的 OLE-DB 提供程序,允许链接。


24) 抽象类和接口有什么区别?

抽象类

  • 它提供了一组规则来实现下一个类。规则通过抽象方法提供。
  • 抽象方法不包含任何定义。
  • 当一个类包含所有没有主体(body)的函数时,它被称为完全抽象类。
  • 另一个类只能继承一个抽象类。

Interface

  • 如果一个类包含所有抽象方法,那么这个类被称为接口。
  • 接口支持多重继承。
  • 接口不包含任何实现
  • 我们只能使用 public 或 abstract 修饰符。

25) 应用程序对象和会话对象有什么区别?

会话对象用于维护每个用户的会话。如果用户进入应用程序,他会获得一个会话 ID,当他离开应用程序时,会话 ID 将被删除。如果他再次进入应用程序,他会获得一个不同的会话 ID,但对于应用程序对象,一旦生成 ID,它就会维护整个应用程序。


26) 主键和带有 NOT NULL 条件的唯一键之间有区别吗?

主键和唯一键之间没有区别,但唯一键允许单个 NULL,而主键不接受 NULL。


27) 值类型和引用类型有什么区别?

值类型和引用类型在声明语法和用法上可能相似,但它们的语义是不同的。值类型和引用类型在存储的内存区域上有所不同。

值类型存储在栈上,而引用类型存储在堆上。

值类型存储实际数据,而引用类型存储数据的引用。

与引用类型相比,值类型的访问速度更快。

值类型可以包含 null 值,而引用类型不能包含 null 值。

值类型派生自 System.ValueType,而引用类型派生自 System.Object。这意味着值类型存储特定值,但引用类型存储对象的引用或地址。

字符串、对象、数组是引用类型,因为它们存储在堆中并且是动态的。


28) .net 中的装箱和拆箱概念是什么?

装箱:将值类型(整数、字符等)隐式转换为引用类型(对象)称为装箱。在装箱过程中,值类型(通常存储在栈上)被分配到堆而不是栈上。装箱将值封装在可以存储在堆段中的对象中。

示例

拆箱:将相同的引用类型(由装箱过程创建)显式转换回值类型称为拆箱。在拆箱过程中,已装箱的值类型从堆中拆箱并分配到栈上。

示例


29) GET 和 POST 方法有什么区别?

GET 和 POST 方法是“表单提交”方法。两者都用于将数据从客户端发送到服务器端。以下是 GET 和 POST 方法的一些区别:

GET 方法可以进行缓存,而 POST 方法不能。

GET 方法只允许 ASCII 字符数据类型,而 POST 方法没有限制,它也允许二进制数据。

GET 方法的字符串长度受限制,而 POST 方法的字符串长度不受限制。

GET 方法不安全,因为它可能被收藏,但 POST 方法是安全的,因为它不能被收藏。

GET 方法存储在浏览器历史记录中,但 POST 方法不存储在浏览器历史记录中。


30) 什么是日志传送?

日志传送是自动化主数据库服务器上数据库和事务日志文件备份,然后将其还原到备用服务器的过程。许多服务器支持这种技术来维护备份服务器,例如 Microsoft SQL Server、4D 服务器、MySQL 和 PostgreSQL。

日志传送的主要目的是像复制一样增加数据库可用性。在每个辅助数据库上,日志备份都特别应用。

日志传送过程的步骤

  • 首先在主 SQL Server 实例上备份事务日志文件
  • 将日志文件复制到辅助 SQL Server 实例
  • 将日志备份文件还原到辅助 SQL Server 实例

31) SQL Server 中有哪些不同类型的复制?

SQL Server 中有三种类型的复制。

1) 快照复制:快照复制以特定时刻的数据原样分发数据。快照复制是复制不经常更改的数据的最佳方法。快照复制是最容易维护的。

2) 事务复制:事务复制是将数据从发布服务器分发到订阅服务器的过程。事务复制通常用于“服务器到服务器”环境。当您希望将增量更改传播到订阅服务器时,它很适用。

3) 合并复制:合并复制将来自各种来源的数据分组到一个集中式数据库中。它通常用于服务器到客户端环境。当多个订阅服务器可能在不同时间更新相同数据时,合并复制很适用。


32) SQL Server 中使用的主要第三方工具是什么?

SQL Server 中使用的第三方工具列表

  • SQL CHECK - Idera:用于监视服务器活动和内存级别。
  • SQL DOC 2 - RedGate:用于文档化数据库。
  • SQL Backup 5 - RedGate:用于自动化备份过程。
  • SQL Prompt - RedGate:为 SQL SERVER 2005/2000 提供 IntelliSense。
  • Lite Speed 5.0 - Quest Soft:用于备份和还原。

33) 使用第三方工具的优点是什么?

使用第三方工具的优点列表

  • 第三方工具提供更快的备份和还原。
  • 它们提供灵活的备份和恢复选项。
  • 它们提供加密的安全备份。
  • 它们提供备份和恢复环境的企业视图。
  • 轻松识别最佳备份设置。
  • 事务日志和事务日志备份的可见性。
  • 备份历史记录和计划的时间线视图。
  • 恢复单个数据库对象。
  • 将完整的数据库还原封装到单个文件中以加快还原时间。
  • 当我们需要改进 SQL Server 本身提供的功能时。
  • 节省时间,提供更好的信息或通知。
  • 第三方工具可以将备份放入单个压缩文件中以减少空间和时间。

34) SQL Server 中有哪些不同类型的排序规则敏感度?

SQL Server 中有四种类型的排序规则敏感度

  • 大小写敏感度
  • 重音敏感度
  • 假名敏感度
  • 宽度敏感度

在问题 5 中详细解释


35) SQL Server 中的 Hotfix 和 Patch 是什么?

Hotfix 是应用于实时系统的小型软件补丁。Hotfix 是一个单一的累积包,包含一个或多个文件,用于解决软件产品中的问题。

例如 - 软件 bug

补丁是安装在机器中用于纠正系统中出现的问题并确保系统安全的程序。Hotfix 是 Microsoft 提供的一种补丁。

 

在 Microsoft SQL Server 中,hotfix 是旨在解决特定问题的小型补丁,最常见的是针对新发现的安全漏洞。Hotfix 主动应对任何 bug。


36) SQL Server 最常用的跟踪标志是什么?

SQL Server 中的跟踪标志设置服务器的特定特性。它充当 SQL Server 的“IF”条件。SQL Server 最常用的跟踪标志是

  • 死锁信息:1204、1205、1222
  • 网络数据库文件:1807
  • 连接日志记录:4013
  • 跳过启动存储过程:4022
  • 禁用锁定提示:8755
  • 强制统一扩展区分配而不是混合页面分配 1118 (SQL 2005 和 2008)。

37) 您如何决定活动节点和被动节点?

打开群集管理器检查 SQL Server 组,您可以在其中看到当前所有者。因此,当前所有者是活动节点,其他节点是被动节点。因为在双节点中,一次只能有一个节点是活动的,并且必须处于被动模式。


38) SQL Server 中 FLOOR 函数的用途是什么?

FLOOR 函数用于将非整数值向下舍入到上一个最小整数。FLOOR 表达式在向下舍入表达式后返回一个唯一值。

语法

例如

FLOOR (7.3)


39) SIGN 函数的用法是什么?

SIGN 函数用于定义指定的数字是正数、负数还是零。它将返回 +1、-1 或 0。SIGN 函数返回带有其符号的值。

语法


40) SQL Server 中的子查询是什么?解释其属性。

在 SQL Server 中,主查询(如 Select、Update、Insert 或 Delete)中的查询称为子查询。它也称为内部查询。

子查询可以添加到 WHERE 子句、FROM 子句或 SELECT 子句中。

子查询的一些属性如下:

  • 子查询必须用括号括起来
  • 子查询可以添加 WHERE、GROUP BY 和 HAVING 子句,但这是可选的。
  • SELECT 子句和 FROM 子句必须包含一个子查询。
  • 用户可以包含多个查询

41) 如何在 SQL Server 中删除表?

用户可以使用 SQL Server Management Studio 或通过 SQL Server 中的 Transact-SQL 从数据库中删除 TABLE

以下是使用 SQL Server Management 删除表的步骤

  • 在对象资源管理器中选择一个表(要删除的)
  • 右键单击表,从快捷菜单中选择 DELETE
  • 单击“是”以确认删除表

42) SQL Server 中有哪些加密机制?

我们可以使用加密来保护 SQL Server 数据库中的数据。以下是 SQL Server 中使用的加密机制

  • Transact-SQL 函数
  • 非对称密钥
  • 对称密钥
  • 证书
  • 透明数据加密

43) 定义 SQL Server 中的魔术表?

SQL Server 内部自动创建和管理以存储任何 DML (SELECT, DELETE, UPDATE 等) 操作的插入、更新值的表,在 SQL Server 中称为魔术表。触发器最好使用它。


44) SQL Server 中的 CDC 是什么?

CDC 被称为“更改数据捕获”。它捕获应用于 SQL Server 表的最新 INSERT、DELETE 和 UPDATE 活动。它以兼容的格式记录 SQL Server 表中所做的更改。


45) SQL Server 中有多少种数据库关系?

SQL Server 中存在三种类型的关系

  • 一对一关系
  • 多对多关系
  • 一对一关系