變量
1.局部變量的聲明(一個@)
declare @n int --聲明變量關鍵字為declare 然后@加變量名 后面是變量類型
declare @s varchar(36)
2.局部變量的賦值
set @s='f4'
set @n=@n+1 --變量的賦值有兩種方法,一種是通過set,一種是select 如果變量不附初始值則默認為null,null參與計算的結果還是null,這一行的@n就等於null
select @n=age from students --如過變量通過select賦值,這里可能在表中查到很多age結果,這里只賦值查詢出來的最后一個age結果,如果set使用這種方法會出錯。
set @n=(select age from Students where ID='1')--亦可以這樣給他賦值
全局變量
全局變量:是系統預定義的,返回一些系統信息,全局變量以兩個@@開頭。
常用的變量:
@@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