SQL Server笔记 -- 第78章:MS SQL Server 基本 DDL 操作

节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 的订单行。

相关推荐
IvorySQL6 小时前
PostgreSQL 日报| pg_vectorsearch 开源向量搜索发布(10 月 14 日)
数据库·人工智能·postgresql·开源·区块链
Eyfcom6 小时前
〖实战〗快运系统 Oracle 性能优化:从“能用”到“扛住双11”的 Java + Spring Boot 实战
java·oracle·性能优化·快递管理系统
m0_587383006 小时前
碰碰好评卡功能落地全流程实战指南 附核心逻辑与常见问题解决方案
java·前端·数据库·后端·struts·需求分析
Y3815326626 小时前
SerpBase + RAG 实战:用搜索 API 给知识库接上实时数据,回答不再过期
java·服务器·数据库
骑着蜗牛撵大象3276 小时前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 里的建表与增删改查手法
数据库·sql·mysql·编辑器·crud·执行计划
Access开发易登软件7 小时前
我全新开发了一套 Access 通用 Excel 导入工具,现在开源了
数据库·microsoft·excel·mfc·vba·access·access开发
Xudde.7 小时前
Billu: box 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
易点云徐源7 小时前
Microsoft Teams 桌面端黑屏与登录异常排查:账户会话和网络路径的影响
网络·microsoft
笃行3507 小时前
SQL编辑器的隐藏技能:KingbaseES 配套 KSQL Developer 使用笔记
数据库
ouynagda7 小时前
iMX6ull Linux 嵌入式驱动开发笔记(LCD / ADXL345 / SPI 子系统)
linux·arm开发·驱动开发·笔记·嵌入式硬件