變量數據庫
1.局部變量的聲明(一個@)安全
declare @n int --聲明變量關鍵字爲declare 而後@加變量名 後面是變量類型服務器
declare @s varchar(36)網絡
2.局部變量的賦值數據結構
set @s='f4'函數
set @n=@n+1 --變量的賦值有兩種方法,一種是經過set,一種是select 若是變量不附初始值則默認爲null,null參與計算的結果仍是null,這一行的@n就等於nullspa
select @n=age from students --如過變量經過select賦值,這裏可能在表中查到不少age結果,這裏只賦值查詢出來的最後一個age結果,若是set使用這種方法會出錯。code
set @n=(select age from Students where ID='1')--亦能夠這樣給他賦值對象
全局變量blog
全局變量:是系統預約義的,返回一些系統信息,全局變量以兩個@@開頭。
經常使用的變量:
@@CONNECTIONS 返回自上次啓動以來鏈接或試圖鏈接的次數。
@@CURSOR_ROWS 返回鏈接上最後打開的遊標中當前存在的合格行的數量(返回被打開的遊標中還未被讀取的有效數據行的行數)
@@DATEFIRST 返回每週第一天的數字
@@ERROR 返回最後執行的SQL 語句的錯誤代碼。
@@FETCH_STATUS 返回被 FETCH 語句執行的最後遊標的狀態,而不是任何當前被鏈接打開的遊標的狀態。
@@IDENTITY 返回最後插入的標識值
@@LANGID 返回當前所使用語言的本地語言標識符(ID)。
@@LANGUAGE 返回當前使用的語言名。
@@LOCK_TIMEOUT 返回當前會話的當前鎖超時設置,單位爲毫秒。
@@PROCID 返回當前過程的存儲過程標識符 (ID) 。
@@ROWCOUNT 返回受上一語句影響的行數。
@@SERVERNAME 返回運行 的本地服務器名稱。
@@SPID 返回當前用戶進程的服務器進程標識符 (ID)。
@@TRANCOUNT 返回當前鏈接的活動事務數。
@@VERSION 返回當前安裝的日期、版本和處理器類型。
@@CPU_BUSY 返回自SQL Server 最近一次啓動以來CPU 的工做時間其單位爲毫秒
@@DATEFIRST 返回使用SET DATEFIRST 命令而被賦值的DATAFIRST 參數值SET DATEFIRST,命令用來指定每週的第一天是星期幾
@@DBTS 返回當前數據庫的時間戳值必須保證數據庫中時間戳的值是唯一的
@@ERROR 返回執行Transact-SQL 語句的錯誤代碼
@@FETCH_STATUS 返回上一次FETCH 語句的狀態值
@@IDLE 返回自SQL Server 最近一次啓動以來CPU 處於空閉狀態的時間長短單位爲毫秒
@@IO_BUSY 返回自SQL Server 最近一次啓動以來CPU 執行輸入輸出操做所花費的時間其單位爲毫秒
@@LANGID 返回當前所使用的語言ID 值
@@LANGUAGE 返回當前使用的語言名稱
@@LOCK_TIMEOUT 返回當前會話等待鎖的時間長短其單位爲毫秒
@@MAX_CONNECTIONS 返回容許鏈接到SQL Server 的最大鏈接數目
@@MAX_PRECISION 返回decimal 和numeric 數據類型的精確度
@@NESTLEVEL 返回當前執行的存儲過程的嵌套級數初始值爲0
@@OPTIONS 返回當前SET 選項的信息
@@PACK_RECEIVED 返回SQL Server 經過網絡讀取的輸入包的數目
@@PACK_SENT 返回SQL Server 寫給網絡的輸出包的數目
@@PACKET_ERRORS 返回網絡包的錯誤數目
@@PROCID 返回當前存儲過程的ID 值
@@REMSERVER 返回遠程SQL Server 數據庫服務器的名稱
@@SERVICENAME 返回SQL Server 正運行於哪一種服務狀態之下如MSSQLServer MSDTC SQLServerAgent
@@SPID 返回當前用戶處理的服務器處理ID 值
@@TEXTSIZE 返回SET 語句的TEXTSIZE 選項值SET 語句定義了SELECT 語句中text 或image數據類型的最大長度基本單位爲字節
@@TIMETICKS 返回每一時鐘的微秒數
@@TOTAL_ERRORS 返回磁盤讀寫錯誤數目
@@TOTAL_READ 返回磁盤讀操做的數目
@@TOTAL_WRITE 返回磁盤寫操做的數目
@@TRANCOUNT 返回當前鏈接中處於激活狀態的事務數
視圖
1.視圖是一張虛擬表,他所存儲的不是實際數據,而是查詢語句,但咱們能夠對視圖進行像數據表同樣的操做。
2.爲何使用視圖呢?個人理解是:1.在遠程傳輸數據時,能夠避免過長的查詢字符,減小流量。2.他能夠簡化繁雜的多表嵌套查詢語句。3.安全性,防止非法用戶訪問敏感數據,由於咱們能夠經過建立視圖展現給用戶,咱們想要給他們查看的數據。
3.視圖的建立
create view vw_city
as
select cityName from city --這個查詢語句能夠隨便的寫,若是是些多層次的嵌套查詢語句的話,那麼下面使用視圖的簡易性就突出了。應爲只用一句簡短的查詢語句就能把本來繁雜的搞定
4.視圖的查詢
select * from vw_city
5.因爲視圖是以查詢語句的形式存儲的,因此通常視圖只用於查看數據,通常不對視圖進行增刪改。若是數據庫中的表數據改變那麼視圖中的數據也會隨之改變,由於視圖就至關於查詢語句
事務
事務定義:
事務有若干條T-SQL指令組成,而且全部的指令昨晚一個總體提交給數據庫系統,執行時,這組指令要麼所有執行完成,要麼所有取消。所以,事務是一個不可分割的邏輯單元。
事務的特色:
事務有4個屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)以及持久性(Durability),也稱做事務的ACID屬性。
原子性:事務內的全部工做要麼所有完成,要麼所有不完成,不存在只有一部分完成的狀況。
一致性:事務內的而後操做都不能違反數據庫的而後約束或規則,事務完成時有內部數據結構都必須是正確的。
隔離性:事務直接是相互隔離的,若是有兩個事務對同一個數據庫進行操做,好比讀取表數據。任何一個事務看到的全部內容要麼是其餘事務完成以前的狀態,要麼是其餘事務完成以後的狀態。一個事務不可能遇到另外一個事務的中間狀態。
持久性:事務完成以後,它對數據庫系統的影響是持久的,即便是系統錯誤,從新啓動系統後,該事務的結果依然存在。
事務的模式:
顯示事務:是用戶使用T-SQL明確的定義事務的開始(begin transaction)和提交(commit transaction)或回滾事務(rollback transaction)
自動提交事務:是一種可以自動執行並能自動回滾事務,這種方式是T-SQL的默認事務方式。例如在刪除一個表記錄的時候,若是這條記錄有主外鍵關係的時候,刪除就會受主外鍵約束的影響,那麼這個刪除就會取消。
能夠設置事務進入隱式方式:set implicit_transaction on;
隱式事務:是指當事務提交或回滾後,SQL Server自動開始事務。所以,隱式事務不須要使用begin transaction顯示開始,只需直接失業提交事務或回滾事務的T-SQL語句便可。
使用時,須要設置set implicit_transaction on語句,將隱式事務模式打開,下一個語句會啓動一個新的事物,再下一個語句又將啓動一個新事務。
事務的示例:
begin tran select * from student where sname=@name and sage=@age if @@ERROR<>0 begin rollback tran insert into student(studentid,sname,sage) values (1,@name,@age) return 0 end else begin commit tran select * from student end go
異常
錯誤函數:
TRY...CATCH 使用錯誤函數來捕獲錯誤信息。 ERROR_NUMBER() 返回錯誤號。 ERROR_MESSAGE() 返回錯誤消息的完整文本。此文本包括爲任何可替換參數(如長度、對象名稱或時間)提供的值。 ERROR_SEVERITY() 返回錯誤嚴重性。 ERROR_STATE() 返回錯誤狀態號。 ERROR_LINE() 返回致使錯誤的例程中的行號。 ERROR_PROCEDURE() 返回出現錯誤的存儲過程或觸發器的名稱。
異常示例:
begin try select 1 / 0; end try begin catch exec proc_error_info; --調用錯誤消息存儲過程 end catch go