记得当年有人问我应该如何学习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出来。

 1SELECT   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]
30FROM     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
50WHERE    (tbl.name = N'EmployeeDepartmentHistory'
51   AND SCHEMA_NAME(tbl.schema_id) = N'HumanResources')
52ORDER 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实例)上运行着多个数据库,那么你还可以根据得到的一些数据来判断哪个数据库需要特别照顾^_^

转载于:https://www.cnblogs.com/Reeezak/archive/2008/03/31/how_to_learn_tsql.html

新手可以借助Profiler学习TSQL相关推荐

  1. 大数据新手的0基础学习路线,从菜鸟到高手的成长之路

    大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家 ...

  2. 为什么借助开源学习是最有效的?

    导读:盛大创新院高级研究员庄表伟近日编撰系列文章<借助开源项目,学习软件开发>活动,引起业界关注.庄表伟认为,通过编撰这些文章,希望更多开发者能够借助开源项目提高开发效率,减少重复劳动并从 ...

  3. ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小

    PS新手入门教程:学习如何修改画布的大小.在photoshop中,可以把画布理解为一张白纸,而我们要处理的图像可以理解为这张白纸表面上的画.我们修改画布的大小时,图像并不会随着画布的大小而整体变大或缩 ...

  4. unity 获取预制体_新手如何从零学习unity

    unity的优势就是多终端跨平台打包,入门也快,很多人感觉自己的英不好,就觉得学不会,其实这是一个误区, unity的界面虽然是英文的,但是它的窗口就只有那么几个,用的次数多了,也就自然的熟练 了,那 ...

  5. 速学计算机,新手电脑配置速成学习

    新手电脑配置速成学习 很多新手在学习电脑时会被一堆的电脑硬件设备搞得头昏脑胀,下面小编给大家提供了新手电脑配置速成学习,欢迎阅读,更多详情请关注应届毕业生考试网. 电脑的配置,是衡量一台电脑好坏的标准 ...

  6. 最简单的平面制图用什么软件_新手用什么软件学习视频剪辑?简单又好学?

    现在不管是年轻人还是上了年纪的人都会使用手机,用手机拍摄视频,看电视,和亲朋好友聊天等等,但是在使用的过程中,就会想要用手机来记录生活,那么在录制视频的时候,发现视频中有一段很不错想要剪辑出来,单独发 ...

  7. html标签怎么快速记忆,seo新手该怎么快速学习html基础代码

    seo新手该怎么快速学习html基础代码 相信站长应该都知道,要做一个网站那么肯定离不开html代码,同样我们做SEO优化肯定也是离不开html代码的优化.那么问题就来了,很多seo新手还不会html ...

  8. 新手站长如何快速学习并实践SEO?

    1.  任何老鸟都是从新人开始通过慢慢不断积累,经过各式各样的失败以及彷徨之后,才让自己拥有越来越多的经验,此时信心才会逐渐出现.如果没有勇气踏出第一步去尝试的话,那么永远不可能走在网络营销这条大路上 ...

  9. C#新手该如何规划学习【学习路线指南】

    花费了几天时间整理了C#学习路线图,可以说是纯野生C#程序员成长路线规划,在这里分享下,希望可以帮助到想从事C#开发的同学们.本人阅历尚浅,有些知识点可能分享不正确,希望广大网友评论区补充,我会同步修 ...

最新文章

  1. 一、typescript介绍和安装
  2. STM32开发 -- UCOSII
  3. 对团队建设与管理的几点看法
  4. 别人要访问我的电脑上部署的tomcat,必须关闭防火墙吗?
  5. URL编码 java
  6. 算法笔记_面试_0.刷leetcode_基础知识范围
  7. pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据设置数据窗口的更新属性...
  8. 李炎恢python_前端教程:李炎恢jQuery视频教程 百度网盘
  9. python cnn入门_pytorch实现CNN卷积神经网络
  10. 八位全加器——python逻辑电路
  11. 记忆中的巷子与老房子
  12. oracle常见语句(转载)
  13. java的像素与dpi_DPI与像素的关系
  14. 微信小程序之时间计算器
  15. iphone和mac互传文件_隔空投送,让你的苹果设备随时随地和别人互传文件!
  16. VBS 请求WebAPI接口_如何设计WEB API
  17. UVa1600 习题6-5 巡逻机器人 (Patrol Robot,ACM/ICPC Hanoi 2006)
  18. 985复旦大学,软件工程学硕停止招生!
  19. 2.8.5Django --9 Django与Ajex
  20. STC89C52RC - 2 - 开发环境搭建

热门文章

  1. RecordBatch分析
  2. (38)VHDL实现主从JK触发器
  3. mongodb mysql数据类型_mongodb中数据类型的坑
  4. 蓝桥杯单片机:11届决赛
  5. qgis二次开发环境搭建(超级详细)
  6. STM32驱动LCD实战
  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之按键驱动框架
  8. STM32 USART通信
  9. 单目视觉里程计 mono vo
  10. tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手