九、T-SQL編程

通過Sql語法來完成業務的處理,執行編寫好的sql語句,就可以完成業務處理。

變量

SQL Server中變量分爲: 局部變量 和 全局變量

局部變量

局部變量是一個能夠擁有特定數據類型的對象,它的作用範圍僅限制在程序內部。在批處理和腳本中變
量可以有如下用途:作爲計數器計算循環執行的次數或控制循環執行的次數,保存數據值供控制流語句
測試,以及保存由存儲過程代碼返回的數據值或者函數返回值。
注意:數據類型不可以是TEXT、NTEXT、IMAGE類型,局部變量被引用時要在其名稱前加上標誌 "@",如果
不爲局部變量賦值,則默認賦值爲null
定義變量:
declare @text varchar(20); --(變量名開始必須是@)
賦值:
--方法1:
set @text = '你好' --(不推薦)
--方法2:
select @text = 'hello'
輸出內容
print @text
方法1:
select @text --映射到結果集
select '測試一下~'
方法2:
print @text --打印到消息框
print '測試一下~'

全局變量

@@CONNECTIONS 返回SQL Server自上次啓動以來嘗試的連接數,無論連接是成功還是失敗
@@CPU_BUSY 返回SQL Server自上次啓動後的工作時間。
其結果以CPU時間增量或“滴答數”來表示,此值爲CPU工作時間的累積值,因此,可能會超出實際
佔用CPU的時間。
乘以@@TIMETICKS即可轉換爲微秒。
@@CURSOR_ROWS 返回連接的數據庫上打開的上一個遊標中的當前限定行的數目,爲了提高性能。
SQL Server可異步填充大型鍵集和靜態遊標。可調用@@CURSOR_ROWS以確定當其被調用時檢索了遊標
符合條件的行數。
@@DATEFIRST 針對會話返回 SET DATEFIRST的當前值。
@@DBTS 返回當前數據庫的當前 timestamp 數據類型的值。這一時間戳值在數據庫中必須是唯一的。
@@ERROR 返回執行的上一個Transact-SQL語句出現錯誤時對應的錯誤編號。
@@FETCH_STATUS 返回針對連接的數據庫當前打開的任何遊標,發出的上一條遊標FETCH語句的狀態。
@@IDENTITY 返回插入到數據表的IDENTITY列的最後一個值。
@@IDLE 返回SQL Server自上次啓動後的空閒時間。結果以CPU時間增量或“時鐘週期”來表示,是所有的累
積值
因此該值可能超過實際經過的時間。乘以@@TIMETICKS即可轉換爲微秒。
@@IO_BUSY 返回自 SQL Server最近一次啓動以來,SQL Server已經用於執行輸入和輸出操作的時間。
其結果是CPU時間增量(時鐘週期),是CPU執行操作的累積值,這個值可能超過實際消逝的時間。
乘以@@TIMETICKS即可轉換爲微秒。
@@LANGID 返回當前使用的語言對應的本地語言標識符(ID)。
@@LANGUAGE 返回當前所用語言的名稱。
  @@LOCK_TIMEOUT 返回當前會話的鎖定超時的設置值(單位爲毫秒)。

  @@MAX_CONNECTIONS 返回 SQL Server 實例允許同時進行的最大用戶連接數。返回的數值不一定是當前配置的數

  值。

@@MAX_PRECISION 按照服務器中的當前設置,返回decimal和numeric 數據類型所用的精度級別。默認情況下,最

大精度級別38.

@@NESTLEVEL 返回在本地服務器上執行的當前存儲過程的嵌套級別(初始值爲0).

@@OPTIONS 返回有關當前SET選項的信息。

@@PACK_RECEIVED 返回 SQL Server 自上次啓動後從網絡讀取的輸入數據包數。

@@PACK_SENT 返回SQL Server自上次啓動後寫入網絡的輸出數據包個數。

@@PACKET_ERRORS 返回自上次啓動 SQL Server後,在SQL Server 連接上發生的網絡數據包錯誤數。

@@ROWCOUNT 返回上一次語句影響的數據行的行數。

@@PROCID 返回 Transact-SQL當前模塊的對象標識符(ID).Transact-SQL模塊可以是存儲過程、用戶定義

函數或觸發器。

不能在CLR模塊或進程內的數據訪問接口中指定@@PROCID.

@@SERVERNAME 返回運行SQL Server的本地服務器的名稱。

@@SERVICENAME 返回SQL Server正在運行的註冊表項的名稱。若當前實例爲默認實例,則@@SERVICENAME返回

MSSQLSERVER;

若當前實例是命名實例,則該函數返回該實例名。

@@SPID 返回當前用戶進程的會話ID.

@@TEXTSIZE 返回SET語句的TEXTSIZE選項的當前值,

它指定 SELECT 語句返回的text或image數據類型的最大長度,其單位爲字節。

@@TIMETICKS 返回每個時鐘週期的微秒數。

@@TOTAL_ERRORS 返回自上次啓動SQL Server之後,SQL Server所遇到的磁盤寫入錯誤數。

@@TOTAL_READ 返回 SQL Server自上次啓動後,由SQL Server 讀取(非緩存讀取)的磁盤的數目。

@@TOTAL_WRITE 返回自上次啓動SQL Server以來,SQL Server所執行的磁盤寫入數。

@@TRANCOUNT 返回當前連接的活動事務數。

@@VERSION 返回當前安裝的日期、版本和處理器類型。

運算符

比較運算符

SELECT *
FROM [ZhaoxiEdu].[dbo].[Company] where Createtime>
where Createtime<
where Createtime=
where Createtime>=
where Createtime<=
where Createtime<>或!=
where Createtime!>
where Createtime!<

邏輯運算符

 

連接運算符

加號(+)是字符串串接運算符,可以將兩個或兩個以上字符串合併串接成一個字符串。其他所有字符串
操作則可以調用字符串函數(如SUBSTRING())進行處理。默認情況下,對於varchar數據類型的數據,
在INSERT或賦值語句中,空的字符串將被解釋爲空字符串。在串接varchar、char或text數據類型的數
據時,空的字符串被解釋爲空字符串。例如:'abc'+"+'def'被存儲爲'abcdef'

流程控制

批處理
一條或多條SQL語句的集合,一個批作爲一個字符串交給服務器去執行。
使用GO表示批,一個批出現錯誤,批中的語句都將會被回滾。
GO
-- SQL語句
GO
分支結構
declare @a int;
declare @b int;
select @a=4;
select @b=2;
if @a>@b ---(不用寫())
begin
print '@a的值大於@b的值'
end
else
begin
print '@b的值大於@a的值'
end
begin end 相當於{}

循環

循環語句——類似於C#中的循環,循環四要素:初始條件,循環條件,循環體,狀態改變循環退出
declare @aa int ;
select @aa=1; --初始條件
while @aa<10
begin
select @aa as 結果; --循環體
print '結果爲:'+ convert(varchar(10),@aa)
select @aa=@aa+1; --狀態改變
end

自定義錯誤處理

可以在CATCH中使用以下語句拋出錯誤:
THROW {error_number | @local_variable},
{ message | @local_variable },
{ state | @local_variable };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章