一、訊息輸出
print:直接在訊息中列印訊息select:在結果表格中列印訊息,可以設置多列,以及每一列的名字
1
2
print 'hello'
select 'hello'
二、變量
變量:(1) 局部變量 (2) 全局變量
(1) 局部變量:
- 以
@開頭 - 先聲明(宣告),再賦值
- 聲明(宣告)
declare變數@str數據類型varchar(20) - 再賦值
set @str = 'I like sql'
1
2
3
4
declare @str varchar(20)
set @str = 'Hello sql'
--select @str='I love sql' --建議使用set賦值
print @str
有兩種方式可以給變量賦值:(1)
set(2)select
(2) 全局變量:
- 以
@@開頭 - 由系統進行定義和維護
常用的變量
@@ERROR:返回最後執行SQL語句的錯誤代碼@@IDENTITY:返回最後插入的標識值。(可取得自動編號的值)@@MAX_CONNECTIONS:返回允許同時進行的最大用戶連線數@@ROWCOUNT:返回上一個語句影響的行數@@SERVERNAME:返回運行SQL Server的本地服務器的名稱@@SERVICENAME:返回SQL Server正在其下運行的註冊表項的名稱@@TRANCOUNT:返回當前連接的活動事務數@@LOCK_TIMEOUT:返回當前會話的當前鎖定超時設置(毫秒)
範例:局部變量&全局變量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
--(1) 局部變量:以`@`開頭,先宣告,再賦值
declare @str varchar(20)
set @str='I love sql'
--select @str='I love sql' --建議使用set賦值
print @str
--set和select進行賦值的區別
--set:賦值變量指定的值
--select:一般用於表中查詢出的數據賦值給變量,如果查詢結果有多條,取最後一條賦值
--exp: select @a = 欄位名 from 表名
--@a的值,會是當前表的最後一行的值給@a
--(2) 全局變量:以`@@`開頭,由系統進行定義和維護
--@@ERROR:返回執行的上一個語句的錯誤號
--@@IDENTITY:返回最後插入的標識值
--@@MAX_CONNECTIONS:返回允許同時進行的最大用戶連線數
--@@ROWCOUNT:返回上一個語句影響的行數
--@@SERVERNAME:返回運行SQL Server的本地服務器的名稱
--@@SERVICENAME:返回SQL Server正在其下運行的註冊表項的名稱
--@@TRANCOUNT:返回當前連接的活動事務數
--@@LOCK_TIMEOUT:返回當前會話的當前鎖定超時設置(毫秒)
範列1:開戶開卡
1
2
3
4
5
6
7
8
9
10
11
12
13
--範列:
--(1)為趙雲此人進行開戶開卡操作,趙雲身份証:D123456789
--開戶
insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
values('D123456789','9922334455','趙雲',GETDATE())
--使用@@IDENTITY 取得自動編號的值
declare @AccountId int--先聲明
set @AccountId = @@IDENTITY--再賦值。將趙雲的自動編號(AccountCode)的值給@AccountId
--開卡
insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
values('999998888803',@AccountId,'123456',0,1)--@AccountId取得到的
開卡資料中,需要取得趙雲開戶後的AccountCode,因為AccountCode是自動編號,所以可以宣告變量@AccountId,透過全域變量@@IDENTITY賦值給 @AccountId,新增開卡的AccountId欄,就放@AccountId變量。
@@IDENTITY:返回最後插入的標識值- 用
delete刪除一筆自動編號,那個編號會永久消失
範列2:求出王五的銀行卡卡號和餘額(子查詢/使用變量)
可以使用兩種方法:(1)子查詢 (2)使用變量
1
2
3
4
5
6
7
8
9
10
11
12
13
--(2)需要求出王五的銀行卡卡號和餘額,王五的身份証:C3344556677
select AccountId from AccountInfo where AccountCode = 'C3344556677'
--方法一:子查詢
select BankCard.CardNo 卡號, BankCard.CardMoney 餘額 from BankCard
inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
where AccountInfo.AccountCode = 'C3344556677'
--方法二:使用變量
--先透過變量找到AccountId
declare @AccountId int
select @AccountId = (select AccountId from AccountInfo where AccountCode = 'C3344556677')
--再透過@AccountId變量找出王五的銀行卡卡號和餘額
select CardNo 卡號, CardMoney 餘額 from BankCard where AccountId = @AccountId
三、Go語句
- 等待go語句之前代碼執行完成之後,才能執行後面的代碼
- 批次處理結束的一個標誌
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--go語句
--(1)等待go語句之前代碼執行完成之後,才能執行後面的代碼
create database DBTEST1 --建立資料庫
go--必須將DBTEST1建立完成之後,才能切換db,如果沒有加GO,資料庫還沒建立完成就切換DB,就會發生錯誤「資料庫'DBTEST1' 不存在。請確定名稱輸入正確。」
use DBTEST1 --切換DBTEST1資料庫
create table Student
(
StuId int primary key identity(1,1),
StuName varchar(20) not null
)
--(2)批次處理結束的一個標誌
declare @num int --@num作用範圍全局(這裡的全局指的是執行代碼的範圍)
set @num = 100
set @num = 200
加上一個go,@num作用範圍是在go之前
1
2
3
4
declare @num int --@num作用範圍是在go之前
set @num = 100
go
set @num = 200--報錯:必須宣告純量變數 "@num"。
加上二個go,@num1作用範圍是在兩個go之間
1
2
3
4
5
6
7
8
9
10
declare @num int
set @num = 100
set @num = 200
go
declare @num1 int --@num1作用範圍是在兩個go之間
set @num1 = 100
go
set @num1 = 200--報錯:必須宣告純量變數 "@num1"。