节78.1:入门
本节介绍一些基本的 DDL(数据定义语言)命令,用于创建数据库、数据库内的表、视图以及存储过程。
创建数据库
以下 SQL 命令在当前服务器上新建名为 Northwind 的数据库,路径为 C:\Program Files\Microsoft SQL Server\...:
sql
USE [master]
GO
CREATE DATABASE [Northwind]
CONTAINMENT = NONE
ON PRIMARY
(
NAME = N'Northwind',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.INSTSQL2012\MSSQL\DATA\Northwind.mdf',
SIZE = 5120KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
)
LOG ON
(
NAME = N'Northwind_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.INSTSQL2012\MSSQL\DATA\Northwind_log.ldf',
SIZE = 1536KB,
MAXSIZE = 2048GB,
FILEGROWTH = 10%
)
GO
ALTER DATABASE [Northwind] SET COMPATIBILITY_LEVEL = 110
GO
注意:T-SQL 数据库由两个文件组成,数据库文件
*.mdf及其事务日志*.ldf。新建数据库时必须同时指定两者。
创建表
以下 SQL 命令在当前数据库中新建名为 Categories 的表,使用架构 dbo(可用 USE <DatabaseName> 切换数据库上下文):
sql
CREATE TABLE dbo.Categories(
CategoryID int IDENTITY NOT NULL,
CategoryName nvarchar(15) NOT NULL,
Description ntext NULL,
Picture image NULL,
CONSTRAINT PK_Categories PRIMARY KEY CLUSTERED (
CategoryID ASC
)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON PRIMARY
) ON PRIMARY TEXTIMAGE_ON PRIMARY
创建视图
以下 SQL 命令在当前数据库中新建名为 Summary_of_Sales_by_Year 的视图,使用架构 dbo:
sql
CREATE VIEW dbo.Summary_of_Sales_by_Year AS
SELECT
ord.ShippedDate,
ord.OrderID,
ordSub.Subtotal
FROM Orders ord
INNER JOIN [Order Subtotals] ordSub
ON ord.OrderID = ordSub.OrderID
该视图将 Orders 表与 [Order Subtotals] 表联接,展示 ShippedDate、OrderID 和 Subtotal 三列。由于 Northwind 数据库中表名 [Order Subtotals] 包含空格,需用方括号括起。
创建存储过程
以下 SQL 命令在当前数据库中新建名为 MyCustOrdersDetail 的存储过程,使用架构 dbo:
sql
CREATE PROCEDURE dbo.MyCustOrdersDetail
@OrderID int,
@MinQuantity int = 0
AS
BEGIN
SELECT
ProductName,
UnitPrice = ROUND(Od.UnitPrice, 2),
Quantity,
Discount = CONVERT(int, Discount * 100),
ExtendedPrice = ROUND(
CONVERT(money, Quantity * (1 - Discount) * Od.UnitPrice),
2
)
FROM Products P, [Order Details] Od
WHERE
Od.ProductID = P.ProductID
AND Od.OrderID = @OrderID
AND Od.Quantity >= @MinQuantity
END
创建完成后,可如下调用该存储过程:
sql
EXEC dbo.MyCustOrdersDetail 10248
上述语句返回所有 OrderID = 10248 且数量大于等于 0(默认)的订单明细。也可指定可选参数:
sql
EXEC dbo.MyCustOrdersDetail 10248, 10
此时仅返回数量至少为 10 的订单行。