SQL Server 2012 從頭開始學(xué)筆記

  1. 用Transact-SQL創(chuàng)建數(shù)據(jù)庫


  2. 查看數(shù)據(jù)庫的存儲路徑


    右鍵屬性
  3. sp_helpdb命令查看所有數(shù)據(jù)庫信息

  4. 刪除數(shù)據(jù)庫
    右鍵刪除或使用命令

DROP DATABASE database_name
  1. 視圖、索引、存儲過程、觸發(fā)器概述


  2. 數(shù)據(jù)類型

  • real是實數(shù)
  • varchar(n) 中的n是存儲字符最大長度
  1. 自定義數(shù)據(jù)類型


  2. 使用資源管理器修改表結(jié)構(gòu)




    若無法保存修改



  3. 使用SQL命令修改表結(jié)構(gòu)

-- 新增字段
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. 標(biāo)識符



select @@VERSION AS 'SQL Server版本', @@SERVERNAME AS '服務(wù)器名稱'
  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的區(qū)別:
select可以一次給多個變量賦值,set一次只能給一個
set賦值的是多個值的子查詢會出錯,select會選擇最后一個賦值

  1. GO命令:表示批處理的結(jié)束
    批處理若出錯,則不會執(zhí)行
USE test   -- 指明要操作的數(shù)據(jù)庫
GO   
-- 一個批處理結(jié)束

select * from ...
update ...
...
GO
-- 第二個批處理結(jié)束

依次類推
  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循環(huán)和IF...ELSE判斷內(nèi),以包含多條語句

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 '學(xué)習(xí)委員'
  WHEN '李四' THEN '體育委員'
  ELSE '無'
END
AS '職位'
FROM stu_info
SELECT s_id, s_name, s_score,
-- 用法二
CASE 
  WHEN s_score > 90 THEN '優(yōu)秀'
  WHEN s_score > 80 THEN '良好'
  WHEN s_score > 70 THEN '一般'
  WHEN s_score > 60 THEN '及格'
  ELSE '不及格'
END
AS '評價'
FROM stu_info

14.4 WHILE循環(huán),注意CONTINUE和BREAK

DECLARE @num INT;
SELECT @num = 10;
WHILE @num > -1
BEGIN
  IF @num > 5
    BEGIN
      PRINT '@num 等于' + CONVERT(VARCHAR(4), @num) + '大于5循環(huán)繼續(xù)執(zhí)行';
      SELECT @num = @num - 1;
      CONTINUE;  -- 結(jié)束本次循環(huán),進(jìn)入下一次循環(huán)
    END
  ELSE
    BEGIN
      PRINT '@num 等于' + CONVERT(VARCHAR(4), @num);
      BREAK;  -- 跳出整個循環(huán)
    END
END

PRINT '循環(huán)終止之后@num等于' + CONVERT(VARCHAR(4), @num);

14.5 GOTO

USE test_db;
BEGIN
SELECT s_name FROM stu_info;
GOTO jump            --跳轉(zhuǎn)到j(luò)ump標(biāo)簽
SELECT s_score FROM stu_info;
jump:                       --jump標(biāo)簽
PRINT '第二條SELECT語句沒有執(zhí)行';
END

14.6 WAITFOR延遲

DECLARE @name VARCHAR(50);
SET @name = 'admin';
BEGIN
WAITFOR DELAY '00:00:10';    -- 延遲10秒,標(biāo)準(zhǔn)格式
PRINT @name;
END;

14.7 RETURN 查詢過程無條件退出

RETURN 0;  -- 0表示成功,1表示失敗
  1. CAST(x AS TYPE)和CONVERT(TYPE, x)數(shù)據(jù)類型轉(zhuǎn)換
SELECT CAST('121231' AS DATE), CAST(100 AS CHAR(3)), CONVERT(TIME, '2012-05-01 12:11:10');
  1. 存儲過程

存儲過程是可重復(fù)調(diào)用的批處理,系統(tǒng)存儲過程在master數(shù)據(jù)庫中,用戶可以自定義存儲過程

USE mytest;
GO
CREATE PROCEDURE SelProc  -- 創(chuàng)建查詢member表的存儲過程
AS
SELECT * FROM member;
GO
-- 調(diào)用存儲過程
USE mytest;
GO
EXEC SelProc;
-- 創(chuàng)建帶參數(shù)的存儲過程
USE test;
GO
CREATE PROCEDURE QueryById @sID INT
AS
SELECT * FROM fruits WHERE s_id = @sID;
GO
-- 用兩種方式調(diào)用帶參數(shù)存儲過程
USE test;
GO
EXECUTE QueryById 101;
EXECUTE QueryById @sID=101;  -- 多參數(shù)情況下好用
-- 創(chuàng)建帶默認(rèn)參數(shù)的存儲過程
USE test;
GO
CREATE PROCEDURE QueryById @sID INT = 101
AS
SELECT * FROM fruits WHERE s_id = @sID;
GO
-- 創(chuàng)建帶輸出變量的存儲過程
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
-- 調(diào)用帶輸出參數(shù)的存儲過程
USE test;
GO
DECLARE @fruitscount INT;
DECLARE @sID INT = 101;
EXEC QueryById3 @sID, @fruitscount OUTPUT
SELECT '該供應(yīng)商一共提供了' + LTRIM(STR(@fruitscount)) + '種水果'
GO

用資源管理器可以執(zhí)行、修改、刪除存儲過程

  1. 函數(shù)
-- 標(biāo)值函數(shù),最后返回一個學(xué)生姓名
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
-- 表值函數(shù),返回的是一張表
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
)

-- 調(diào)用表值函數(shù)
SELECT * FROM getStuRecordbySex('男');
  1. 刪除存儲過程和函數(shù)
DROP PROCEDURE pName;
DROP FUNCTION fName;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,060評論 5 115
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 2,001評論 0 10
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,974評論 0 9
  • 以下是我讀《得到》上古典老師《超級個體》專欄中的“4-5 聽說你訂了很多專欄看不過來?來看看這條鄙視鏈”的學(xué)習(xí)與思...
    知行迢迢閱讀 1,082評論 1 0
  • 零八日 剛剛刷知乎看到一句話是“熬過異地戀就結(jié)婚吧”。這不是我第一次看到這句話,卻是我第一次看到這句話的頃刻間流出...
    徐象閱讀 299評論 0 0

友情鏈接更多精彩內(nèi)容