如果你觉得T-SQL内容太多,学习起来比较没有成就感,那么可以试试每天看一条SQL语句的方式。而这些SQL语句也不需要到网上到处搜,SQL Server Management Studio本身就有许多……
记得当年有人问我应该如何学习SQL(这里主要是说T-SQL,以下均用SQL代之),我的回答是看MS给的那个联机丛书,不说别的,先看了那些语法再说。看完之后,自然会有许多的收获。比如,有人认为自己SQL语句写得很不错了,可是连Left Join跟Right Join都不知道,认为“反正差不多,没关系”,甚至认为Right Join是一种Inner Join……又有人认为SELECT语句不过如此而已,然而连HAVING都不知道是干什么的……
如此种种,自然是看看联机丛书中的Syntax会比较好,然后再看看Level更高一些的文章(都是联机丛书中的)。
后来发现,光看那个联机丛书的话,可能会有很大的挫折感,因为内容太多,而且又比较乱(相对的),也就不知道要看到何年何月才能到头了……因此,我给各位新手们介绍一下我最早的时候是如何学习SQL的,不过为了与时俱进,这里我以SQLServer2005为例。实际上,我当年也是有上述感觉的,总觉得这内容是不是也太多了,好像完全不着边际一样,后来我就在一个师兄的介绍下,使用了Profiler来查看我们在企业管理器(2005以后就叫SQL Server Management Studio了)中所做的操作的SQL语句,效果非常不错。其实,原因很简单,你每天就用Profiler找那么几条SQL语句出来,然后看看里面有没有自己不明白的,然后就查联机丛书,这样,每天学的东西不用很多,但是每天都有新的成就感出现,自然而然的也就有兴趣继续学下去了。
好了,我们来看看具体的步骤。
首先,打开Profiler(在SQL Server Management Studio中)。
然后新建一个跟踪(文件-->新建跟踪)
填入数据库登陆信息后会弹出当前跟踪的一个属性设置窗口。
到第二个标签页点“列选择器”
在下图所示的位置填上“Microsoft SQL Server Management Studio”
然后点“确定”再点“运行”,OK,可以了。
现在到SQL Server Management Studio中打开一个数据库,选中其一个表,再点开这个表的“Columns”文件夹。之后,再看看Profiler窗口中的结果。
好了,随便找一条来看,把代码COPY出来。
1
SELECT clmns.name AS [Name],
2
'Server[@Name=' + QUOTENAME(CAST(SERVERPROPERTY(N'Servername') AS SYSNAME), '''') +
3
']' + '/Database[@Name=' + QUOTENAME(DB_NAME(),'''') + ']' + '/Table[@Name=' +
4
QUOTENAME(tbl.name,'''') + ' and @Schema=' + QUOTENAME(SCHEMA_NAME(tbl.schema_id),'''') +
5
']' + '/Column[@Name=' + QUOTENAME(clmns.name,'''') + ']' AS [Urn],
6
CAST(ISNULL(cik.index_column_id,0) AS BIT) AS [InPrimaryKey],
7
CAST(ISNULL((SELECT TOP 1 1
8
FROM sys.foreign_key_columns AS colfk
9
WHERE colfk.parent_column_id = clmns.column_id
10
AND colfk.parent_object_id = clmns.object_id),
11
0) AS BIT) AS [IsForeignKey],
12
usrt.name AS [DataType],
13
ISNULL(baset.name,N'') AS [SystemType],
14
CAST(CASE
15
WHEN baset.name IN (N'nchar',
16
N'nvarchar')
17
AND clmns.max_length <> - 1 THEN clmns.max_length / 2
18
ELSE clmns.max_length
19
END AS INT) AS [Length],
20
CAST(clmns.PRECISION AS INT) AS [NumericPrecision],
21
CAST(clmns.scale AS INT) AS [NumericScale],
22
clmns.is_nullable AS [Nullable],
23
clmns.is_computed AS [Computed],
24
ISNULL(s2clmns.name,N'') AS [XmlSchemaNamespaceSchema],
25
ISNULL(xscclmns.name,N'') AS [XmlSchemaNamespace],
26
ISNULL((CASE clmns.is_xml_document
27
WHEN 1 THEN 2
28
ELSE 1
29
END),0) AS [XmlDocumentConstraint]
30
FROM sys.tables AS tbl
31
INNER JOIN sys.all_columns AS clmns
32
ON clmns.object_id = tbl.object_id
33
LEFT OUTER JOIN sys.indexes AS ik
34
ON ik.object_id = clmns.object_id
35
AND 1 = ik.is_primary_key
36
LEFT OUTER JOIN sys.index_columns AS cik
37
ON cik.index_id = ik.index_id
38
AND cik.column_id = clmns.column_id
39
AND cik.object_id = clmns.object_id
40
AND 0 = cik.is_included_column
41
LEFT OUTER JOIN sys.types AS usrt
42
ON usrt.user_type_id = clmns.user_type_id
43
LEFT OUTER JOIN sys.types AS baset
44
ON baset.user_type_id = clmns.system_type_id
45
AND baset.user_type_id = baset.system_type_id
46
LEFT OUTER JOIN sys.xml_schema_collections AS xscclmns
47
ON xscclmns.xml_collection_id = clmns.xml_collection_id
48
LEFT OUTER JOIN sys.schemas AS s2clmns
49
ON s2clmns.schema_id = xscclmns.schema_id
50
WHERE (tbl.name = N'EmployeeDepartmentHistory'
51
AND SCHEMA_NAME(tbl.schema_id) = N'HumanResources')
52
ORDER BY clmns.column_id ASC
就这么几个简单的操作,我们可以发现好多的问题。比如:
1. 在Profiler中,我实在记不得Management Studio的全名了,该怎么办?
2. 字符串前面的N是干什么的?
3. SELECT TOP 1是什么意思?
4. SELECT TOP 1 1又是什么意思?是11吗?那去掉两个1中间的空格试试看?
5. CASE clmns.is_xml_document WHEN 1 THEN 2 ELSE 1 END 如果写成 CASE WHEN clmns.is_xml_document = 1 THEN 2 ELSE 1 END 有什么区别吗?
诸如此类,就这一个操作,你可能会发现许多自己所不知道的,或是平常没有注意的东西。
另外,这个Profiler的目的可不仅仅是为了帮你学习SQL语句这么简单,它本来的目的是为了帮助你了解SQL Server的运行情况的,这对于进行数据库性能优化来说是非常有帮助的。而且,如果你在某个组织的IT部门工作,而同一个服务器(或者说SQL Server实例)上运行着多个数据库,那么你还可以根据得到的一些数据来判断哪个数据库需要特别照顾^_^
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix