SQL Server 面试题和答案 Top 50 (2025)

以下是针对新手和有经验的候选人的 SQL Server 面试问题及答案,助您获得理想的工作。

SQL Server 面试问题及答案(面向初学者)


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

有两种身份验证模式:

  • Windows 模式
  • 混合模式

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

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


2. 什么是 SQL Profiler?

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


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 约束可以应用于表中的列,以限制可以放在列中的值。Check 约束用于强制完整性。


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

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


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

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

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

8. 子查询有哪些类型?

子查询有三种类型:

  • 单行子查询,只返回一行
  • 多行子查询,返回多行
  • 多列子查询,将多列返回给主查询。根据子查询结果,主查询将执行。

9. 什么是 SQL Server Agent?

SQL Server Agent 在 SQL Server 管理员 (DBA) 的日常工作中起着至关重要的作用。Server Agent 的目的是通过调度引擎轻松实现任务,该引擎允许我们的作业在预定的日期和时间运行。


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

计划任务或作业用于自动化可以在预定时间以固定间隔运行的进程。这种任务的调度有助于减少夜间的干预,并可以在特定时间进行数据馈送。用户还可以按顺序安排任务的生成。


11. SQL Server 中的 COALESCE 是什么?

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

示例 –

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. 触发器有哪些类型?

有四种类型的触发器:

  • 插入
  • 删除
  • 更新
  • Instead of

18. INSERT 语句中的 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 Server 表用于存储存储过程脚本?

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


30. SQL Server 中的 Magic Tables 是什么?

在 Insert、Delete 和 Update 等 DML 操作期间,SQL Server 会创建 Magic Tables 来保存 DML 操作期间的值。这些 Magic Tables 在触发器中用于数据事务。


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

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

SUBSTRING('Smiley',1,3)

结果为 Smi

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

结果为 3,因为 I 出现在字符串的第 3 个位置


32. 如何创建登录?

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

CREATE LOGIN MyLogin WITH PASSWORD = '123';

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

ISNULL 函数用于检查 SQL Server 中给定值是否为 NULL 或非 NULL。此函数还允许用 NULL 替换值。


34. FOR 子句的用途是什么?

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


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

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

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

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


36. COMMIT 和 ROLLBACK 有什么区别?

BEGIN 和 COMMIT 之间的每个语句在执行 COMMIT 时都会持久化到数据库。BEGIN 和 ROOLBACK 之间的每个语句都会恢复到 ROOLBACK 执行时的状态。


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

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


38. @@SPID 的用途是什么?

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


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

可以通过关键字 RECOMPILE 来执行存储过程。

示例

Exe <SPName>  WITH RECOMPILE

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


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

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


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 数据类型用于在 SQL Server 数据库中存储 XML 文档。创建列和变量并在数据库中存储 XML 实例。


47. 什么是 CDC?

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


48. 什么是 SQL 注入?

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

即使参数也可能被熟练且经验丰富的攻击者操纵。


49. 用于防止 SQL 注入攻击的方法有哪些?

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

  • 对存储过程使用参数
  • 过滤输入参数
  • 使用动态 SQL 的参数集合
  • 在 LIKE 子句中,使用转义字符

50. 什么是过滤索引?

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

这些面试问题也将有助于您的口试