50 个最热门 SQL Server 面试问题及答案 (2025)

以下是 SQL Server 面试问题和答案,可帮助新手和有经验的应聘者获得理想的工作。

面向新手的 SQL Server 面试问题和答案


1.SQL Server中有哪两种身份验证模式?

有两种身份验证模式 -

  • Windows 时尚
  • 混合模式

可以通过选择 SQL Server 配置属性的工具菜单并选择安全页面来更改模式。

👉 免费 PDF 下载:SQL Server 面试问题与答案


2.什么是 SQL Profiler?

SQL Profiler 是一款允许系统管理员监控 SQL 服务器事件的工具。它主要用于捕获和保存文件或表的每个事件的数据以供分析。


3.什么是递归存储过程?

SQL Server 支持递归存储过程,即自行调用。递归存储过程可以定义为一种解决问题的方法,其中解决方案是重复得出的。它可以嵌套最多 32 层。

CREATE PROCEDURE [dbo].[Fact]
(
@Number Integer,
@RetVal Integer OUTPUT
)
AS
DECLARE @In Integer
DECLARE @Out Integer
IF @Number != 1
BEGIN
SELECT @In = @Number – 1
EXEC Fact @In, @Out OUTPUT - Same stored procedure has been called again(Recursively)
SELECT @RetVal = @Number * @Out
END
ELSE
BEGIN
SELECT @RetVal = 1
END
RETURN
GO

4.本地临时表和全局临时表有什么区别?

  • 本地临时表在有连接时可见,在关闭连接时会被删除。
CREATE TABLE #<tablename>
  • 全局临时表对所有用户都是可见的,并且在创建它的连接关闭时会被删除。
CREATE TABLE ##<tablename>

5.什么是CHECK约束?

CHECK 约束可应用于表中的列,以限制可放置在列中的值。检查约束是为了强制完整性。


6. SQL服务器可以链接到其他服务器吗?

SQL服务器 可以连接到任何具有 OLE-DB 提供程序的数据库以提供链接。例如: Oracle 具有 OLE-DB 提供程序,该提供程序具有与 SQL 服务器组连接的链接。


7.什么是子查询及其属性?

子查询是可以嵌套在主查询中的查询,如 Select、Update、Insert 或 Delete 语句。当允许表达式时可以使用它。子查询的属性可以定义为

  • 子查询不应该包含 order by 子句
  • 子查询应放在主查询比较运算符的右侧
  • 子查询应该放在括号中,因为它需要在主查询之前先执行
  • 可以包含多个子查询

8.子查询有哪些类型?

子查询有三种类型:

  • 单行子查询,仅返回一行
  • 返回多行的多行子查询
  • 多列子查询返回主查询的多个列。使用该子查询结果,将执行主查询。

9.什么是 SQL 服务器代理?

SQL Server 代理在 SQL Server 管理员 (DBA) 的日常任务中起着至关重要的作用。服务器代​​理的目的是使用调度程序引擎轻松执行任务,从而使我们的作业能够在预定的日期和时间运行。


10. SQL Server 中的计划任务是什么?

计划任务或作业用于自动执行可在预定时间定期运行的流程。这种任务安排有助于减少夜间的人为干预,并且可以在特定时间完成供稿。用户还可以订购必须生成的任务。


11. SQL Server 中的 COALESCE 是什么?

COALESCE 用于返回参数中的第一个非空表达式。此函数用于从参数中的多个列中返回非空值。

示例–

Select COALESCE(empno, empname, salary) from employee;

12. 在 SQL Server 编程中如何处理异常?

使用TRY—CATCH 结构处理异常,通过在TRY 块内编写脚本并在CATCH 块中编写错误处理来处理。


13.FLOOR函数的用途是什么?

FLOOR 函数用于将非整数值向上舍入为前一个最小整数。示例如下

FLOOR(6.7)

返回6。


14. 我们可以检查数据库中的锁吗?如果可以,我们如何进行锁检查?

是的,我们可以检查数据库中的锁。这可以通过使用名为 sp_lock 的内置存储过程来实现。


15.SIGN函数有什么用?

SIGN 函数用于确定指定的数字是正数、负数还是零。这将返回 +1、-1 或 0。

示例–

SIGN(-35) returns -1

16.什么是触发器?

触发器用于在对表执行插入、更新或删除命令时执行一批 SQL 代码。修改数据时会自动触发或执行触发器。它可以在插入、删除和更新操作时自动执行。


17. 触发器有哪些类型?

触发器有四种类型,分别是:

  • 插页
  • 删除
  • 更新
  • 而不是

18. 插入语句中的 IDENTITY 列是什么?

IDENTITY 列用于表列中,以使该列成为自动增量数字或代理键。


19. SQL 中的 Bulkcopy 是什么?

Bulkcopy 是一种用于从表中复制大量数据的工具。此工具用于在 SQL Server 中加载大量数据。


20. 什么查询将用于获取数据库中的触发器列表?

查询数据库中的触发器列表-

Select * from sys.objects where type='tr'

21.UNION 和 UNION ALL 有什么区别?

  • UNION:使用 UNION 命令从两个表中选择相关信息。它类似于 JOIN 命令。
  • UNION All:UNION ALL 命令与 UNION 命令相同,不同之处在于 UNION ALL 会选择所有值。它不会删除重复的行,而是会从所有表中检索所有行。

22. 全局临时表如何表示及其范围?

全局临时表在表名前用 ## 表示。范围在会话外部,而本地临时表在会话内部。可以使用 @@SPID 找到会话 ID。


针对有经验的 SQL Server 面试问题和答案

23. 存储过程和动态SQL有什么区别?

存储过程是一组以编译形式存储的语句。动态 SQL 是在运行时动态构建的一组语句,它不会存储在数据库中,而只是在运行时执行。


24. 什么是排序规则?

排序规则用于指定表中的排序顺序。排序顺序有三种类型:

  1. 区分大小写
  2. 不区分大小写
  3. 二进制

25. 如何计算表中的记录数?

以下查询可用于获取表中记录的数量 -

Select * from <tablename> Select count(*) from <tablename> Select rows from sysindexes where id=OBJECT_ID(tablename) and indid<2

26. 获取SQL Server版本的命令是什么?

Select SERVERPROPERTY('productversion')

用于获取 SQL Server 的版本。


27.什么是 UPDATE_STATISTICS 命令?

当索引中发生大量删除或修改或批量复制时,使用 UPDATE_STATISTICS 命令来更新表上的索引。


28. SET NOCOUNT ON/OFF 语句有什么用途?

默认情况下,NOCOUNT 设置为 OFF,每次执行命令时都会返回受影响的记录数。如果用户不想显示受影响的记录数,可以明确将其设置为 ON-(SET NOCOUNT ON)。


29. 哪个 SQL 服务器表用于保存存储过程脚本?

Sys.SQL_Modules 是用于存储存储过程脚本的 SQL Server 表。存储过程的名称保存在名为 Sys.Procedures 的表中。


30. SQL Server 中的魔术表是什么?

在执行插入、删除和更新等 DML 操作期间,SQL Server 会创建魔术表来保存 DML 操作期间的值。这些魔术表用于触发器内部的数据事务。


31. SQL Server 中的 SUBSTR 和 CHARINDEX 有什么区别?

SUBSTR 函数用于返回给定字符串中的特定部分。但是,CHARINDEX 函数给出给定指定字符串中的字符位置。

SUBSTRING('Smiley',1,3)

给出结果为 Smi

CHARINDEX('i', 'Smiley',1)

给出 3 作为结果,因为我出现在 3rd 字符串的位置


32. 如何创建登录?

您可以使用以下命令创建登录

CREATE LOGIN MyLogin WITH PASSWORD = '123';

33.什么是 ISNULL() 运算符?

ISNULL 函数用于检查 SQL Server 中给定的值是否为 NULL。此函数还提供用 NULL 替换值的功能。


34. FOR 子句有什么用?

FOR 子句主要用于 XML 和浏览器选项。此子句主要用于以XML格式或在浏览器中显示查询结果。


35. 每个表的最大索引数是多少?

对于 SQL Server 2008,每个表最多可以使用 100 个索引。1 Cluster在 SQL Server 中,每个表可以使用 ed 索引和 999 个非聚集索引。

每个表最多可使用 1000 个索引。1 Cluster在 SQL Server 中,每个表可以使用 ed 索引和 999 个非聚集索引。

1 Cluster在 SQL Server 中,每个表可以使用 ed 索引和 999 个非聚集索引。


36.COMMIT 和 ROLLBACK 有什么区别?

执行 COMMIT 时,BEGIN 和 COMMIT 之间的每个语句都会持久保存到数据库中。BEGIN 和 ROOLBACK 之间的每个语句都会恢复到执行 ROLLBACK 时的状态。


37.varchar和nvarchar类型有什么区别?

Varchar 和 nvarchar 相同,但唯一的区别是 nvarhcar 可用于存储多种语言的 Unicode 字符,并且与 varchar 相比占用更多空间。


38.@@SPID 有什么用?

@@SPID 返回当前用户进程的会话 ID。


39. 在运行时重新编译存储过程的命令是什么?

存储过程可以借助名为 RECOMPILE 的关键字来执行。

例如:

Exe <SPName>  WITH RECOMPILE

或者我们可以在存储过程本身中包含 WITHRECOMPILE。


40. 如何在 SQL Server 中删除重复的行?

可以使用 SQL Server 的 CTE 和 ROW NUMER 功能删除重复的行。


41. SQL Server 用户名和密码存储于 SQL Server 的哪里?

用户名和密码存储在 sys.server_principals 和 sys.sql_logins 中。但密码不以普通文本形式存储。


42.GETDATE和SYSDATETIME有什么区别?

两者相同,但 GETDATE 可以提供精确到毫秒的时间,而 SYSDATETIME 可以提供精确到纳秒的时间。SYSDATE TIME 比 GETDATE 更准确。


43. 如何将数据从一个表复制到另一个表?

INSERT INTO SELECT

该命令用于将数据插入到已创建的表中。

SELECT INTO

该命令用于创建一个新表,其结构和数据可以从现有表中复制。


44.TABLESAMPLE是什么?

TABLESAMPLE 用于随机抽取应用程序所需的行样本。抽取的样本行基于行的百分比。


45. 哪个命令用于用户定义的错误消息?

RAISEERROR 是用于生成和启动给定会话的错误处理的命令。这些用户定义的消息存储在 sys.messages 表中。


46. XML 数据类型是什么意思?

XML 数据类型用于存储 XML 文档 SQL Server数据库. 创建列和变量并将 XML 实例存储在数据库中。


47.什么是CDC?

CDC 是 Change Data Capture 的缩写,用于捕获最近更改的数据。此功能存在于 SQL Server 2008 中。


48.什么是 SQL 注入?

SQL 注入是恶意用户发起的一种攻击,其中恶意代码可以插入到字符串中,然后传递给 SQL 服务器实例进行解析和执行。在执行收到的所有语法有效的查询时,必须检查所有语句是否存在漏洞。

甚至参数也可以被熟练且经验丰富的攻击者操纵。


49. 防范SQL注入攻击的方法有哪些?

以下是防止SQL注入攻击的方法:

  • 对存储过程使用参数
  • 过滤输入参数
  • 将参数集合与动态 SQL 结合使用
  • 在 like 子句中,用户转义字符

50.什么是过滤索引?

过滤索引用于过滤表中的某些行,以提高查询性能、索引维护并降低索引存储成本。当使用 WHERE 子句创建索引时,它被称为过滤索引。

这些面试问题也会对你的口试有帮助