SQL Server 常用实用 SQL 语句汇总
掌握 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 语句的详细内容,更多关于数据库运维与开发技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









