1. 火车头上的SQL Server
在数年前的某个夜晚,一个火车头上的旅客突然醒来,发现自己身处于一列陌生的火车之中,而熟睡的乘客们毫不知情。旅客推门走出车厢,在车厢尽头发现了一个房间,房间内放着一部老式的电脑和一张纸条。
1.1 纸条上写着什么?
纸条上写着:
欢迎访问这列神奇的火车!为了赢得自由,你需要使用这台电脑连接到我给你的SQL Server。用它来找到这个旅程的终点,就可以赢得你自己的自由。拿起键盘和鼠标,让我们开始吧。
2. 连接到SQL Server
旅客怀着好奇和兴奋的心情,坐在电脑前打开SQL Server。他几乎不知道要在SQL Server上面做什么,所以他先尝试连接上服务器:
--连接到 SQL Server
USE master
GO
然而,旅客很快受到了打击:
Msg 911, Level 16, State 1, Line 1
Database 'master' does not exist. Make sure that the name is entered correctly.
2.1 数据库是否存在?
这部电脑并没有master数据库!这让旅客感到困惑,于是他开始思考这个神奇的火车和他的终点到底在哪里。
3. 发现数据库
旅客恍然大悟,他发现这个神奇的火车就是一个SQL Server实例,而且它上面有了自己的数据库。那么现在问题来了,他该如何找到这个数据库呢?
3.1 能否列出所有数据库?
旅客在电脑上输入了如下的命令,尝试列出所有的数据库:
--列出所有数据库
SELECT name, database_id, create_date
FROM sys.databases;
结果却并不令人满意:
Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.databases'.
3.2 如何查看用户数据库?
做为一个合格的SQL Server管理员,你一定能轻松完成这个任务:
--列出所有用户数据库
SELECT name, database_id, create_date
FROM sys.databases
WHERE database_id > 4;
这样旅客就能根据自己的需求来选择合适的数据库了。
4. 探索数据库
旅客发现了一个名为AdventureWorks2017的数据库,于是他开始对这个数据库进行探索。
4.1 检查表
旅客想要知道AdventureWorks2017这个数据库里面都有哪些表,他采用如下命令进行查询:
--列出所有表
USE AdventureWorks2017
GO
SELECT [name]
FROM sys.tables
ORDER BY [name];
结果出来了:
HumanResources.Department
HumanResources.Employee
HumanResources.EmployeeDepartmentHistory
...
Sales.StoreWithDemographics
Sales.SalesTerritoryHistory
4.2 计算表中的行数
现在旅客想要知道这些表里面一共有多少行数据:
--计算每张表的行数
SELECT t.[name] AS [Table],
p.[rows] AS [Row count]
FROM sys.tables AS t
JOIN sys.partitions AS p ON t.object_id = p.object_id
WHERE p.index_id <= 1
ORDER BY [Row count] DESC;
结果却让旅客有些惊讶:大部分的行数都为0!
5. 到达终点
虽然旅客还有很多事情要弄明白,但是他已经意识到火车头所说的终点并不是翻找数据库或者蹲在电脑前。于是,他站起身来,走向通往火车车头的门。当门打开的瞬间,光芒和鲜风迎面而来,旅客终于看到了属于自己的足迹和未来。“每个人都有自己的旅程,而我的旅程从这条神奇的火车开始。”