1. 程式人生 > >T-SQL 高階程式設計(基本語法)

T-SQL 高階程式設計(基本語法)

T-SQL 高階程式設計

 
/*-變數應用-*/
 --以標記為字首
 --以標記為字首
 
 --區域性變數宣告
 declare @ 
 
 --區域性變數賦值:使用語句或語句

 --set 賦值語句一般賦給變數指定的資料常量
 set @ = 
 
 --select 賦值語句一般用於從表中查詢資料,然後再賦給變數
 --當用select賦值時,不進行篩選會將最後一條記錄賦給變數
 select @ =  from  where 



全域性變量表
變數含義
@@error最後一個T-SQL錯誤的錯誤號
@@identity最後一次插入的標識值
@@language當前使用的語言的名稱
@@max_connections可以建立的同時連線的最大數目
@@rowcount受上一個SQL語句影響的行數
@@servername本地伺服器的名稱
@@servicename該計算機上的SQL伺服器的名稱
@@timeticks當前計算上每刻度的微秒數
@@transcount當前連線開啟的事物數
@@versionSQL Sever的版本資訊
/*-輸出語句-*/ print convert(varchar(大小),變數或字串) --只適合列印字元和字串 select 變數 as 自定義列名--適合所有型別/*-邏輯控制語句-*/--if-else條件語句 if(條件) begin --語句塊 end else begin --語句塊
end --while迴圈語句 while(條件) begin --語句塊 end --case多分支語句 case when 條件1 then 結果1 when 條件2 then 結果2 else 結果3 end 列名 = case when 列值 then 表示式 else 表示式 end /*-高階查詢-*/--簡單子查詢 select 列名 from 表名 where 條件列名 = (select 條件列名 from 表名 where 條件) --in和not in子查詢 select 列名 from 表名 where 條件列名
in (select 條件列名 from 表名 where 條件) select 列名 from 表名 where 條件列名 not in (select 條件列名 from 表名 where 條件) --exists和not exists子查詢 if exists(select * from 表名 where 條件) begin --語句塊 end if not exists(select * from 表名 where 條件) begin --語句塊 end /*-事務-*/--管理事務開始事務:begin transaction 提交事務:commit transaction 回滾事務:rollback transaction--分類 顯示事務:用begin transaction 明確指定事務的開始 隱式事務:通過設定set implicit_transaction on 語句,將隱式事務模式設定為開. 當隱式事務模式操作時,SQL Server將在提交或回滾事務後自動啟動新事務.無法描述事務 的開始,只需要提交或回滾每個事務. 自動提交事務:這是SQL Server 的預設模式,它將每條單獨的T-SQL 語句視為一個事務. 如果成功執行,則自動提交.如果錯誤,則自動回滾.--開始事務 begin transaction --定義變數,用於累計錯誤 declare @errorSum int --初始化變數 set @errorSum=0 --語句--累計錯誤 set @errorSum = @errorSum + @@error if @errorSum <>0 begin print --錯誤提示--回滾事務 rollback transaction end else begin print --成功提示

--提交事務 commit transaction end

/*-索引-*/
--索引型別唯一索引:unique 聚集索引:clustered 非聚集索引:nonclusered
use 
資料庫名
go
--查詢索引
if exists (select * from sysindexes where name = '
索引名')
--刪除索引
drop index 
表名.索引名
--建立索引
create nonclustered index 
索引名
on 表名(索引列名)
where fillfactor = 
--大小為0-100之間的值
go

--查詢索引
select * from 
表名 (index = 索引名) where 由索引列名組成的條件


/*-建立檢視-*/
use 
資料庫名
go
--查詢檢視
if exists (select * from sysobjects where name = '
檢視名')
--刪除檢視
drop view 
檢視名
--建立檢視
create view 
檢視名
as
--查詢語句
go

--使用檢視
select * from 
檢視名

常用的系統儲存過程
系統儲存過程 說明
sp_databases 列出伺服器上所有的資料庫
sp_helpdb 報告有關指定資料庫或所有資料庫的資訊
sp_renamedb 舊名,新名 更改資料庫的名稱
sp_tables 返回當前環境下可查詢的物件的列表
sp_columns 返回某個表列的資訊
sp_help 檢視某個表的所有資訊
sp_helpconstraint 表名 檢視某個表的約束
sp_helpindex 表名 檢視某個表的索引
sp_stored_procedures 列出當前環境中所有儲存過程
sp_password 新增或修改登入賬戶的密碼
sp_helptext 顯示預設值、未加密的儲存過程、使用者自定義的儲存過程、出發器或檢視的實際文字
xp_cmdshell 'Dos命令' 完成DOS命名下的一些操作



--自定義儲存過程
--不帶參的儲存過程
use 資料庫名
go
--查詢儲存過程
if exists (select * from sysobjects where name = '儲存過程')
--刪除儲存過程
drop procedure 儲存過程名
go
--建立儲存過程
create procedure 儲存過程名
as
declare @變數名 資料型別
--SQL語句(一般用於查詢語句)
go

--呼叫儲存過程
exec 儲存過程名


--建立帶輸入引數的儲存過程
use 資料庫名
go
--查詢儲存過程
if exists (select * from sysobjects where name = '儲存過程')
--刪除儲存過程
drop procedure 儲存過程名
go
--建立儲存過程
create procedure 儲存過程名
@變數名1 資料型別 --輸入引數(當多個引數時用,隔開)
as
declare @變數名2 資料型別
--SQL語句(一般用於插入、修改、刪除語句)
go

--呼叫儲存過程
exec 儲存過程名 給變數名1賦值



--建立帶輸出引數的儲存過程
use 資料庫名
go
--查詢儲存過程
if exists (select * from sysobjects where name = '儲存過程')
--刪除儲存過程
drop procedure 儲存過程名
go
--建立儲存過程
create procedure 儲存過程名
@變數名1 資料型別 output,--output關鍵字,否則視為輸入引數
@變數名2 資料型別        --輸入引數(當多個引數時用,隔開)
as
declare @變數名3 資料型別
--SQL語句(一般用於查詢語句)
go

--呼叫儲存過程
declare @變數名4 資料型別  --定義變數,用於存放儲存過程變數名1的返回的結果
exec 儲存過程名 @變數名4 output,@變數名2 資料型別  


/*-處理錯誤資訊-*/
use 資料庫名
go
--查詢儲存過程
if exists (select * from sysobjects where name = '儲存過程')
--刪除儲存過程
drop procedure 儲存過程名
go
--建立儲存過程
create procedure 儲存過程名
@變數名1 資料型別,
@變數名2 output 
as
declare @變數名3 資料型別
--錯誤處理
msg_id:在sysmessages系統表中指定的使用者定義錯誤資訊
msg_str:使用者定義的特定資訊,最長為255個字元
serverity:與特定資訊相關聯,表示使用者定義的嚴重級別.使用者可以使用0~18級,19~25級
  是sysadmin固定角色的成員預留的,並且需要指定with log選項,20~25級錯
  誤被認為是致命的錯誤
state:表示錯誤的狀態,是1~127的值

raiserror('msg_id | msg_str',severity,state);
--SQL語句(一般用於查詢語句)
go

--呼叫儲存過程
declare @變數名4 資料型別  --定義變數,用於存放儲存過程d的返回的結果
exec 儲存過程名 @變數名4 output,@變數名2 資料型別