-
用Transact-SQL創(chuàng)建數(shù)據(jù)庫
-
查看數(shù)據(jù)庫的存儲路徑
sp_helpdb
命令查看所有數(shù)據(jù)庫信息刪除數(shù)據(jù)庫
右鍵刪除
或使用命令
DROP DATABASE database_name
-
視圖攒射、索引咪辱、存儲過程、觸發(fā)器概述
數(shù)據(jù)類型
- real是實數(shù)
- varchar(n) 中的n是存儲字符最大長度
-
自定義數(shù)據(jù)類型
-
使用資源管理器修改表結(jié)構(gòu)
若無法保存修改
使用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
-
標(biāo)識符
select @@VERSION AS 'SQL Server版本', @@SERVERNAME AS '服務(wù)器名稱'
- 局部變量
-- 聲明局部變量
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會選擇最后一個賦值
-
GO命令:表示批處理的結(jié)束
批處理若出錯烟具,則不會執(zhí)行
USE test -- 指明要操作的數(shù)據(jù)庫
GO
-- 一個批處理結(jié)束
select * from ...
update ...
...
GO
-- 第二個批處理結(jié)束
依次類推
- PRINT輸出用戶自定義信息以及變量的字符串值
DECLARE @name VARCHAR(10) = '小明' -- 這里DECLARE直接賦值
DECLARE @age INT = 21
PRINT '姓名 年齡'
PRINT @name + ' ' + CONVERT(VARCHAR(20), @age)
-- 若直接PRINT @age會報錯梢什,必須是字符串
- 流程控制語句
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表示失敗
- 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');
- 存儲過程
存儲過程是可重復(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í)行言蛇、修改僻他、刪除存儲過程
- 函數(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('男');
- 刪除存儲過程和函數(shù)
DROP PROCEDURE pName;
DROP FUNCTION fName;