SQL Server 2012 从头开始学笔记

  1. 用Transact-SQL创建数据库


  2. 查看数据库的存储路径


    右键属性
  3. sp_helpdb命令查看所有数据库信息

  4. 删除数据库
    右键删除或使用命令

DROP DATABASE database_name
  1. 视图、索引、存储过程、触发器概述


  2. 数据类型

  • real是实数
  • varchar(n) 中的n是存储字符最大长度
  1. 自定义数据类型


  2. 使用资源管理器修改表结构




    若无法保存修改



  3. 使用SQL命令修改表结构

-- 新增字段
ALTER TABLE authors
ADD auth_note VARCHAR(100) NULL

-- 修改字段
ALTER TABLE authors
ALTER COLUMN auth_phone VARCHAR(15)
GO

-- 删除字段
ALTER TABLE authors
DROP COLUMN auth_phone
  1. 标识符



select @@VERSION AS 'SQL Server版本', @@SERVERNAME AS '服务器名称'
  1. 局部变量
-- 声明局部变量
DECLARE @Name varchar(30), @Phone varchar(20), @Address char(2);

-- 用select赋值
DECLARE @MyCount INT
SELECT @MyCount = 10
SELECT @MyCount
GO

-- 用set赋值
DECLARE @rows int
SET @rows = (SELECT count(*) from member)
SELECT @rows
GO

select 与set的区别:
select可以一次给多个变量赋值,set一次只能给一个
set赋值的是多个值的子查询会出错,select会选择最后一个赋值

  1. GO命令:表示批处理的结束
    批处理若出错,则不会执行
USE test   -- 指明要操作的数据库
GO   
-- 一个批处理结束

select * from ...
update ...
...
GO
-- 第二个批处理结束

依次类推
  1. PRINT输出用户自定义信息以及变量的字符串值
DECLARE @name VARCHAR(10) = '小明'  -- 这里DECLARE直接赋值
DECLARE @age INT = 21
PRINT '姓名  年龄'
PRINT @name + '   ' + CONVERT(VARCHAR(20), @age)

-- 若直接PRINT @age会报错,必须是字符串
  1. 流程控制语句
    14.1 BEGIN...END

用在while循环和IF...ELSE判断内,以包含多条语句

14.2 IF...ELSE

DECLARE @age int
SELECT @age = 10
IF @age < 30
  BEGIN
  PRINT 'HELLO'
  PRINT 'This is a young man!'
  END
ELSE 
  PRINT 'This is an old man!'

14.3 CASE 的两种用法

USE test_db
SELECT s_id, s_name,
-- 用法一
CASE s_name
  WHEN '马华' THEN '班长'
  WHEN '张三' THEN '学习委员'
  WHEN '李四' THEN '体育委员'
  ELSE '无'
END
AS '职位'
FROM stu_info
SELECT s_id, s_name, s_score,
-- 用法二
CASE 
  WHEN s_score > 90 THEN '优秀'
  WHEN s_score > 80 THEN '良好'
  WHEN s_score > 70 THEN '一般'
  WHEN s_score > 60 THEN '及格'
  ELSE '不及格'
END
AS '评价'
FROM stu_info

14.4 WHILE循环,注意CONTINUE和BREAK

DECLARE @num INT;
SELECT @num = 10;
WHILE @num > -1
BEGIN
  IF @num > 5
    BEGIN
      PRINT '@num 等于' + CONVERT(VARCHAR(4), @num) + '大于5循环继续执行';
      SELECT @num = @num - 1;
      CONTINUE;  -- 结束本次循环,进入下一次循环
    END
  ELSE
    BEGIN
      PRINT '@num 等于' + CONVERT(VARCHAR(4), @num);
      BREAK;  -- 跳出整个循环
    END
END

PRINT '循环终止之后@num等于' + CONVERT(VARCHAR(4), @num);

14.5 GOTO

USE test_db;
BEGIN
SELECT s_name FROM stu_info;
GOTO jump            --跳转到jump标签
SELECT s_score FROM stu_info;
jump:                       --jump标签
PRINT '第二条SELECT语句没有执行';
END

14.6 WAITFOR延迟

DECLARE @name VARCHAR(50);
SET @name = 'admin';
BEGIN
WAITFOR DELAY '00:00:10';    -- 延迟10秒,标准格式
PRINT @name;
END;

14.7 RETURN 查询过程无条件退出

RETURN 0;  -- 0表示成功,1表示失败
  1. CAST(x AS TYPE)和CONVERT(TYPE, x)数据类型转换
SELECT CAST('121231' AS DATE), CAST(100 AS CHAR(3)), CONVERT(TIME, '2012-05-01 12:11:10');
  1. 存储过程

存储过程是可重复调用的批处理,系统存储过程在master数据库中,用户可以自定义存储过程

USE mytest;
GO
CREATE PROCEDURE SelProc  -- 创建查询member表的存储过程
AS
SELECT * FROM member;
GO
-- 调用存储过程
USE mytest;
GO
EXEC SelProc;
-- 创建带参数的存储过程
USE test;
GO
CREATE PROCEDURE QueryById @sID INT
AS
SELECT * FROM fruits WHERE s_id = @sID;
GO
-- 用两种方式调用带参数存储过程
USE test;
GO
EXECUTE QueryById 101;
EXECUTE QueryById @sID=101;  -- 多参数情况下好用
-- 创建带默认参数的存储过程
USE test;
GO
CREATE PROCEDURE QueryById @sID INT = 101
AS
SELECT * FROM fruits WHERE s_id = @sID;
GO
-- 创建带输出变量的存储过程
USE test;
GO
CREATE PROCEDURE QueryById3
@sID INT = 101,
@fruitscount INT OUTPUT  -- 输出变量
AS
SELECT @fruitscount=COUNT(fruits.s_id) FROM fruits WHERE s_id=@sID;
GO
-- 调用带输出参数的存储过程
USE test;
GO
DECLARE @fruitscount INT;
DECLARE @sID INT = 101;
EXEC QueryById3 @sID, @fruitscount OUTPUT
SELECT '该供应商一共提供了' + LTRIM(STR(@fruitscount)) + '种水果'
GO

用资源管理器可以执行、修改、删除存储过程

  1. 函数
-- 标值函数,最后返回一个学生姓名
CREATE FUNCTION GetStuNameById(@stuid INT)
RETURN VARCHAR(30)
AS
BEGIN
DECLARE @stuName CHAR(30)
SELECT @stuName=(SELECT s_name FROM stu_info WHERE s_id = @stuid)
RETURN @stuName
END
-- 表值函数,返回的是一张表
CREATE FUNCTION getStuRecordBySex(@stuSex CHAR(2))
RETURNS TABLE
AS
RETURN
(
  SELECT s_id, s_name, s_sex, (s_score-10) AS newScore
  FROM stu_info
  WHERE s_sex = @stuSex
)

-- 调用表值函数
SELECT * FROM getStuRecordbySex('男');
  1. 删除存储过程和函数
DROP PROCEDURE pName;
DROP FUNCTION fName;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,724评论 5 116
  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,794评论 0 10
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,968评论 0 9
  • 以下是我读《得到》上古典老师《超级个体》专栏中的“4-5 听说你订了很多专栏看不过来?来看看这条鄙视链”的学习与思...
    知行迢迢阅读 847评论 1 0
  • 零八日 刚刚刷知乎看到一句话是“熬过异地恋就结婚吧”。这不是我第一次看到这句话,却是我第一次看到这句话的顷刻间流出...
    徐象阅读 288评论 0 0