SQL Server 常用实用 SQL 语句汇总

沿途有光
沿途有光
发布时间:2026-10-15| 4人浏览过
原创

掌握 SQL Server 基础与进阶语句是高效管理数据库的关键。本文汇总了从系统视图查询、数据清洗到事务控制等实用 SQL 片段,帮助开发者快速解决日常运维中的常见需求。

查看系统信息与表结构

在数据库管理中,了解当前数据库对象及其属性是首要任务。以下语句可帮助快速获取表、存储过程及相关依赖信息。

第1步:查看指定表的外键与主键约束

通过查询 sysobjects 系统对象,可以查找特定表关联的主键(PK)或外键信息。注意原草稿中用于查外键的代码实际上查询的是主键(xtype='PK'),且子查询逻辑较为古老。更通用的做法是直接查询外键相关视图,但此处保留原意:

-- 查看某表相关的主键约束
SELECT * FROM sysobjects 
WHERE parent_obj IN (
    SELECT id FROM sysobjects WHERE name = '表名'
) AND xtype = 'PK';

-- 查看所有包含主键的表
SELECT * FROM sysobjects WHERE xtype = 'PK';

第2步:获取表的所有字段名称

当需要编写动态 SQL 或生成 ORM 映射时,获取列名非常有用。可以通过 syscolumns 结合 object_id() 函数实现:

SELECT name FROM syscolumns 
WHERE id = object_id('表名');

或者使用标准的 information_schema 视图查看字段和数据类型:

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = '表名';

第3步:查看数据库对象与存储过程

列出当前数据库中所有的用户表、存储过程,或查找引用了特定表的视图/函数:

-- 获取所有用户表
SELECT * FROM sysobjects WHERE xtype = 'U' AND category = 0;

-- 获取所有存储过程名称
SELECT name AS 存储过程名称 
FROM sysobjects WHERE xtype = 'P';

-- 查看与某表相关的视图、存储过程、函数
SELECT a.* FROM sysobjects a, syscomments b 
WHERE a.id = b.id AND b.text LIKE '%表名%';

数据操作与清洗技巧

除了基础查询,数据清理和批量操作也是日常开发的高频场景。

第4步:删除含特定模式的数据行

利用 PATINDEX 函数可以检测字符串中是否包含数字、字母等特定模式,从而实现条件删除:

-- 删除 title 列中包含任何数字的行
DELETE FROM news 
WHERE PATINDEX('%[0-9]%', title) > 0;

第5步:去除重复数据并保留最小 ID

在处理脏数据时,通常需要按某个字段去重,保留 ID 较小(即最早创建)的记录。利用 EXISTS 子句可实现高效的自连接删除:

DELETE FROM news 
WHERE EXISTS (
    SELECT 1 FROM news t 
    WHERE t.title = news.title AND t.id < news.id
);

高级查询与性能优化

涉及排序、分页及全文匹配的高级查询往往关系到应用性能和用户体验。

第6步:实现 SQL Server 分页

SQL Server 2005+ 推荐使用 ROW_NUMBER() 窗口函数进行分页,相比传统的 TOP 方案更灵活:

SELECT * FROM (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY tab.ID DESC) AS rownum, 
        tab.* 
    FROM 表名 AS tab
) AS t 
WHERE rownum BETWEEN @StartRow AND @EndRow;

第7步:中文排序与全文匹配

根据业务需求,可能需要按笔画或拼音排序,或使用类似正则表达式的 LIKE 模式进行精确匹配:

-- 按姓氏笔画排序(支持 GBK/GB2312)
SELECT * FROM TableName 
ORDER BY CustomerName COLLATE Chinese_PRC_Stroke_ci_as;

-- 模拟全文匹配:查找中间包含 "China" 的词
-- 使用通配符 ^[a-zA-Z0-9] 确保非字母数字边界
SELECT * FROM YourTable 
WHERE FieldName LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%' 
   OR FieldName LIKE N'%[^a-zA-Z0-9]China' 
   OR FieldName LIKE N'China[^a-zA-Z0-9]%' 
   OR FieldName LIKE N'China';

第8步:计算 SQL 执行时间

在调试性能问题时,手动记录时间戳是一种简单有效的方法:

DECLARE @d DATETIME;
SET @d = GETDATE();

-- 此处执行你的查询语句
SELECT * FROM SYS_ColumnProperties; -- 示例查询

-- 输出耗时毫秒数
SELECT [语句执行花费时间(毫秒)] = DATEDIFF(ms, @d, GETDATE());

事务管理与集合运算

确保数据一致性和组合结果集是数据库操作的重要环节。

第9步:正确使用事务

在进行多步插入或更新前,开启事务可以防止误操作导致的数据不一致。若中间步骤出错,可回滚以撤销所有更改:

-- 开始事务
BEGIN TRAN;

INSERT INTO TableName VALUES (...);

-- 如果发生错误,执行回滚
ROLLBACK TRAN;

-- 如果一切正常,提交事务
COMMIT TRAN;

第10步:理解 UNION, EXCEPT, INTERSECT

这些运算符用于组合两个查询结果:

  • UNION:合并两个结果集并去除重复行。使用 UNION ALL 则保留重复行,性能通常更高。
  • EXCEPT:返回仅在第一个结果集中出现的行,并去重。配合 ALL 可不去重。
  • INTERSECT:返回两个结果集的交集(共同拥有的行),并去重。配合 ALL 可不去重。

以上就是 SQL Server 实用 SQL 语句的详细内容,更多关于数据库运维与开发技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。